【发布时间】:2020-06-11 03:54:12
【问题描述】:
我是一名 React 新手,并试图通过构建一个简单的报价生成器来学习它,其中根据用户选择的心情生成报价。 App 组件保存状态:引号和情绪(其中每个元素都是嵌套对象),其子组件是 Mood 组件。
现在,App 组件的状态由四种心情组成,我希望发生的是:当用户单击 Mood 组件内的按钮时,他/她将被重定向到该心情的页面,并且 Mood 组件的状态是设置为那种特定的心情。
我自己制定的解决方案非常粗糙,我正在寻找一种方法让它更优雅/更实用。
这是 App 状态的 moods 对象:
const moods = {
mood1: {
type: 'upset',
image: 'abc.png',
},
mood2: {
type: 'unmotivated',
image: 'abc.png',
},
mood3: {
type: 'anxious',
image: 'abc.png',
},
}
App 组件:
state ={
moods: moods,
}
render(){
return (
<div className="Container">
<ul className='moods'>
{
Object.keys(this.state.moods).map(key => <Mood
moodsData = {this.state.moods}
key={key}
indexKey = {key}
index={this.state.moods[key].type}
details={this.state.moods[key]}
/>)
}
</ul>
</div>
);}}
这就是我在 Mood 组件中的深入程度,按钮上的 onClick 函数是:
handleClick = (e) => {
this.setState({moods: e.target.value});
}
我将不胜感激任何指示/建议!花了这么多小时,我觉得我的大脑不再接受任何 Youtube 教程/媒体文章。
【问题讨论】:
-
我的建议是,应该在应用组件级别设置状态,使用 prop 作为函数,该函数将由嵌套组件上的 handleClick 函数调用。
-
嘿!您正在尝试做的事情称为道具,您将一个值从父级传递给子级,该值可以是状态,它也会随着父级的变化而发生变化。
-
嘿,谢谢 Vimal 和 Sebastian!塞巴斯蒂安,你是绝对正确的,我已经做到了,而且效果很好——我的问题是因为状态是一个嵌套对象,我只需要它的一部分作为一个孩子的状态。
标签: javascript reactjs