javascript - 反应相同的组件通信
问题描述
早上好,
我正在创建一个反应应用程序,这个应用程序将有四个“面”,每面可以有不同的值,所以我映射了相同的组件 4 次:
:[...Array(item)].map((data) =>
<Side
key={ data }
Style='wall-holder'
InputClass='input-height'
/>
)
}
因此,每一面都可以作为自己的东西工作,在每一面,用户都可以使用 Side 组件中存在的输入输入一个特定的值:
Side Component= input= 1, input =2;
Side Component= input=3, input =5;
Side Component= input=3, input =5;
Side Component= input=3, input =5;
注意:只有一个组件侧,我只映射了 4 次,所以我可以重复使用它
现在我希望能够在数组或对象中获取所有这些输入,以便添加所有输入值,但是当我尝试使用 api 上下文将其发送到全局状态时,它只保留最后添加的值,我明白为什么会发生这种情况(有点),但我还不知道如何解决这个问题
解决方案
在父组件中保持状态,如下所示。使用 index 更新 Side 组件的每个输入状态。
import {useState} from "react";
const ParentComp = () => {
const [state, setState] = useState({});
return [...Array(item)].map((data, dataIndex) =>
<Side
key={ data }
Style='wall-holder'
InputClass='input-height'
setState={setState}
dataIndex={dataIndex}
/>
)
}
在你的Side
组件中。
<input
onChange={e =>
props.setState(prevState => {
return { ...prevState, [props.dataIndex]: e.target.value };
})
}
/>;
推荐阅读
- python - 由于输入形状错误,未拟合 sklearn 模型
- android - 运行 Android Studio 时出现问题
- jekyll - 将子文件夹添加到 Jekyll 中的 _includes 目录
- c++ - 使用可变参数函数作为模板参数
- spring-boot - Spring数据/cassandra批量插入
- jquery - jquery 定时 div 动画
- c# - C# InvokeMember、GetElementById、CefSharp ChromiumWebBrowser 中的 SetAttribute
- python - 如何使用python将字母转换为数字?
- javascript - 获取基本授权
- jquery - Jquery点击更改显示