reactjs - 将具有对象的状态传递给 React 中的另一个兄弟组件并映射它
问题描述
我正在使用一个状态来存储一个对象,就像
const [inputList, setInputList] = useState([{ lessonName: "", lessonDescription: "" }]);
这样我就可以使用 {inputList.map(lessons)} 将它映射到一个表中。在另一个兄弟组件中。
我在兄弟组件中初始化了状态。
const {inputList} = props;
const lessons = (inputs,index) => {
return (
<tr key ={index}>
<td>{inputs.lessonName}</td>
<td>{inputs.lessonDescription}</td>
<td onClick={handleShow}><AiOutlineUpload fill='blue'/><sup> </sup>Add Content</td>
</tr>
)
}
但是现在当我尝试使用它在表格中映射它时
<tr>
{inputList.map(lessons)}
</tr>
它说 inputList 未定义。
解决方案
看看这个代码框
https://codesandbox.io/s/tender-resonance-p64ye
在这种情况下,您需要声明状态和方法来更新父组件中的状态 Form.js
setInputList = (newState) => {
this.setState({
inputList: [newState]
});
};
您需要将方法和状态传递给子组件
switch (step) {
case 1:
return <CreateCourse nextStep={this.nextStep} />;
case 2:
return (
<LessonInfo
setInputList={this.setInputList.bind(this)}
nextStep={this.nextStep}
prevStep={this.prevStep}
/>
);
case 3:
return (
<LessonList
inputList={this.state.inputList}
nextStep={this.nextStep}
prevStep={this.prevStep}
/>
);
default:
return null;
}
在更新状态的组件中,您将创建一个函数来处理数据并将其发送到状态。我在 onClick 事件上使用了具有此功能的按钮。
const setInputList = (e, arg) => {
e.preventDefault();
const object = {
lessonName: arg.lessonName,
lessonDescription: arg.lessonDescription
};
props.setInputList(object);
};
在组件渲染中,状态将使用类似这样的方法来调用状态并渲染它,确保它不是未定义的。
{inputList?.map((lesson) => (
<>
<td>{lesson.lessonName}</td>
<td>{lesson.lessonDescription}</td>
</>
))}
确保状态是一个对象数组,以便您可以使用 map 函数。
推荐阅读
- scala - 最后一列名称包含空格时,Spark 无法读取 CSV
- javascript - 为什么我的 Firebase 应用的表格中出现“未定义”?
- javascript - 在获取数据时将 null 或 undefined 传递给组件是否更好?
- sql-server - 将文件移动到子文件夹 ssis 包
- android - 如何使用 Local Notifications / Notification.Builder 在 Android 上的 Xamarin.Forms 中播放自定义声音
- javascript - 如何执行位于符号链接目录内的脚本?
- java - java.io.FileNotFoundException(试图反序列化)
- android - 如何使用 ViewPager 在特定页面上实现水平和垂直过渡?
- amazon-cloudformation - 使用 AWS Cloudformation 配置具有 SNS 主题的 CloudTrail
- json - 如何在 AWK 中打印 JSON 对象