如何从已在 ReactJS 中渲染的组件中提取值?
How to extract values from components that have been rendered in ReactJS?
我是 React 的新手,我刚刚开始了一个新项目来学习它。目前,我一直在研究如何从另一个组件呈现的组件中提取值。我会给出一个示例代码来更好地解释我自己。
假设我构建了 Fruit 和 Vegetables 组件,它们每个都有
this.state = {
price: 0,
}
以后
this.setState({price:/*randomly generated positive integer*/})
我尝试将它们封装在一个名为 Base 的新组件中。在 Base 的 render() 函数中我有:
render() {
return (
<>
<Fruit></Fruit>
<Vegetables></Vegetables>
<button onClick={() => this.add()}>Add Prices!</button>
</>
)
}
其中 add() 函数旨在添加先前呈现的水果和蔬菜价格的价格。我试图为它们分配一个 id 并使用 DOM 来获取它们的值,但我无法达到它们的 this.state。有没有办法实现这一点,或者,在 React 中执行此操作的常见做法是什么?预先感谢您的指导!
一种常见的做法是在您的主要组件中定义价格,然后将这些价格作为属性传递给它的子组件。
否则,您可以使用状态管理库(例如 Redux)从您应用中的任何位置访问状态(对于这种简单的情况,这太过分了)
好吧,根据定义,您不应该能够在组件外部修改 React 的组件状态。 (从 parent 我认为没有办法 afaik。但是如果你想从 child 更新,你可以通过道具传递一个函数,从 parent 到 child 更新 parent的状态)。
克服这个问题的简单方法是在 Base
组件的状态中定义价格,然后在 Base 组件中添加函数将更新 Base 状态。你可以通过道具将价格传递给水果和蔬菜。
大致如下:
function Base() {
const [prices, setPrices] = useState({
fruit: 20,
vegetable: 10,
});
const add = () => {
setPrices({
fruit: prices.fruit + 10,
vegetable: prices.vegetable + 15
});
}
return (<>
<Fruit price={prices.fruit}></Fruit>
<Vegetables price={prices.vegetable}></Vegetables>
<button onClick={() => this.add()}>Add Prices!</button>
</>);
}
function Fruit({price})
{
//----
}
function Vegetable({price})
{
//.....
}
然而,在复杂的应用程序中,通过 N 个 children 传递道具会变得乏味。将来当你的应用程序增长时,你可能想看看 React Contexts。 https://reactjs.org/docs/context.html
我是 React 的新手,我刚刚开始了一个新项目来学习它。目前,我一直在研究如何从另一个组件呈现的组件中提取值。我会给出一个示例代码来更好地解释我自己。
假设我构建了 Fruit 和 Vegetables 组件,它们每个都有
this.state = {
price: 0,
}
以后
this.setState({price:/*randomly generated positive integer*/})
我尝试将它们封装在一个名为 Base 的新组件中。在 Base 的 render() 函数中我有:
render() {
return (
<>
<Fruit></Fruit>
<Vegetables></Vegetables>
<button onClick={() => this.add()}>Add Prices!</button>
</>
)
}
其中 add() 函数旨在添加先前呈现的水果和蔬菜价格的价格。我试图为它们分配一个 id 并使用 DOM 来获取它们的值,但我无法达到它们的 this.state。有没有办法实现这一点,或者,在 React 中执行此操作的常见做法是什么?预先感谢您的指导!
一种常见的做法是在您的主要组件中定义价格,然后将这些价格作为属性传递给它的子组件。
否则,您可以使用状态管理库(例如 Redux)从您应用中的任何位置访问状态(对于这种简单的情况,这太过分了)
好吧,根据定义,您不应该能够在组件外部修改 React 的组件状态。 (从 parent 我认为没有办法 afaik。但是如果你想从 child 更新,你可以通过道具传递一个函数,从 parent 到 child 更新 parent的状态)。
克服这个问题的简单方法是在 Base
组件的状态中定义价格,然后在 Base 组件中添加函数将更新 Base 状态。你可以通过道具将价格传递给水果和蔬菜。
大致如下:
function Base() {
const [prices, setPrices] = useState({
fruit: 20,
vegetable: 10,
});
const add = () => {
setPrices({
fruit: prices.fruit + 10,
vegetable: prices.vegetable + 15
});
}
return (<>
<Fruit price={prices.fruit}></Fruit>
<Vegetables price={prices.vegetable}></Vegetables>
<button onClick={() => this.add()}>Add Prices!</button>
</>);
}
function Fruit({price})
{
//----
}
function Vegetable({price})
{
//.....
}
然而,在复杂的应用程序中,通过 N 个 children 传递道具会变得乏味。将来当你的应用程序增长时,你可能想看看 React Contexts。 https://reactjs.org/docs/context.html