我知道我可以使用一个处理函数来从子组件到父组件获取数据。
const Parent = () => {
const [message, setMessage] = React.useState("Hello World");
const chooseMessage = (message) => {
setMessage(message);
};
return (
<div>
<h1>{message}</h1>
<Child chooseMessage={chooseMessage} />
</div>
);
};
const Child = ({ chooseMessage }) => {
let msg = 'Goodbye';
return (
<div>
<button onClick={() => chooseMessage(msg)}>Change Message</button>
</div>
);
};
如果我在同一个组件中多次使用<Child />
会怎么样?在这种情况下我将如何处理数据。
const Parent = () => {
const [message, setMessage] = React.useState("Hello World");
const chooseMessage = (message) => {
setMessage(message);
};
return (
<div>
<h1>{message}</h1>
<Child chooseMessage={chooseMessage} />
<Child chooseMessage={chooseMessage} />
<Child chooseMessage={chooseMessage} />
<Child chooseMessage={chooseMessage} />
</div>
);
};
处理这个问题的最佳方法是什么。
先谢了...
1条答案
按热度按时间mu0hgdu01#
你没有给你的问题添加多少上下文,所以我将尽我所能回答它。
你希望有多个信息从N个子节点传递到父节点,并且(我假设)你不能在
Parent
中创建那么多的状态,因为数量是动态的,你想做的是有一个数组作为父节点中的状态,让每个子节点有一个数组的索引,让它只在该索引处操作数组中的元素。https://codesandbox.io/s/hardcore-mclean-f8dzmf?file=/src/Parent.jsx
这是一个简单的演示,我只修改了
Parent
,根本没有修改Child
,代码如下:Parent.jsx
在(1)中,你可以看到状态是一个数组,在你的应用程序中,我假设子元素的数量是动态的,所以从一个空数组开始,随着子元素数量的增加,向其中添加元素。
在(2)中,你可以看到
setState
函数有点奇怪,为什么我用的是const newMessages = [...messages]
,而不是const newMessages = messages
,这是一种对数组中元素的变化做出React的方法,因为默认情况下,它不会对数组中元素的变化做出React,也不会对数组本身的变化做出React。在(3),你可以看到传递的
chooseMessage
有一点不同,所以为了演示的目的,我只是将子节点的数量设置为4,并手动设置每个子节点的索引,然后创建匿名函数传递给子节点,这样Child
中的代码就不需要修改了。我假设您需要通过某种.map
函数动态创建这些子对象,就像我对<h2>
标记所做的那样。希望这个有用。