Javascript 我应该如何在这里使用shouldComponentUpdate来更新React.js中的父状态?
我是React.js的新手,在更新父组件状态时遇到问题。我附上了完整的代码,这样就不会错过一些重要的东西 我需要我的“重置”按钮来重置父组件的状态 您可以看到问题所在 您应该在导航器菜单中打开“事件”,尝试选择类别,然后重置它们 父组件:components/events/filter bar.jsJavascript 我应该如何在这里使用shouldComponentUpdate来更新React.js中的父状态?,javascript,reactjs,Javascript,Reactjs,我是React.js的新手,在更新父组件状态时遇到问题。我附上了完整的代码,这样就不会错过一些重要的东西 我需要我的“重置”按钮来重置父组件的状态 您可以看到问题所在 您应该在导航器菜单中打开“事件”,尝试选择类别,然后重置它们 父组件:components/events/filter bar.js chils component:components/shared/dropdown/category.js因此,您在FilterBar和category组件状态中有类别-它们不同步。由于Filte
chils component:components/shared/dropdown/category.js因此,您在
FilterBar
和category
组件状态中有类别-它们不同步。由于FilterBar
也将类别
作为道具
接收,这表明类别
没有单一的真相来源。至少有三个地方可以将类别保存在不同的组件状态中。这是一件非常糟糕的事情,会导致错误和难以维护的状态。解决方案是只在一个地方设置类别状态,然后将其传递给需要它们的组件(以及更新类别的方法)
无论如何,如果只重置下拉类别是您想要的,那么您可以这样做:
FilterBar
中创建一个新方法,根据需要命名它,并将其作为道具传递给Categories
组件。此方法只接受一个参数-类别数组。此方法将更新FilterBar
state.categoriesCategories
组件中,删除state.selected
和saveSelected
方法。在使用saveSelected
的地方,将其替换为从FilterBar
传递的prop(函数/方法)卸载下拉列表,然后再次装载它们。这就像刷新页面的一部分
这样做:
将visible:true
添加到FilterBar
状态
将onReset
方法添加到同一组件:
更新重置按钮:onClick={this.onReset}
有条件地呈现按钮工具栏
:
返回this.state.visible?:null//仅出于演示目的缩短了代码
如果家长需要访问孩子的状态,那么该状态很可能属于家长,并作为道具传递给孩子。尝试将状态移动到下拉列表组
,并将其作为道具传递到类别下拉列表
。非常感谢您的回答。首先,我们只是以Java开发人员的身份编写这个项目,所以我们只需要工作前端。我同意也需要理解。由于任务的关系,首先我按照你说的做了,但这不起作用。然后我用shouldComponentUpdate尝试了一些东西,它似乎在某个时候起了作用。现在我做了些改变,你能看到我是否正确理解你吗?你们可以看到在右边注释的新行和自己注释的旧行。仍在试图理解你们想要包含什么。重置下拉列表(类别,按挂载日期和日期)就是你要做的吗?是的,但首先我想检查这是否适用于类别。然后我也会用rest组件(我的意思是作为道具传递方法)来实现这一点,虽然你们很接近,但你们并没有正确地实现第四步。另外,shouldComponentUpdate
不返回布尔值-这是错误的。使用正确的签名将其更改为componentdiddupdate
<代码>按钮
导入也不正确。这是一个错误。是的,这是你应用程序中的另一个错误。如果我帮你修好的话,就会出现另一个。我们需要结束这一切。依我看,你的问题已经解决了。
onReset = () => {
this.setState(
state => ({ visible: false }),
() => {
this.setState({ visible: true });
}
);
};
return this.state.visible ? <ButtonToolbar /> : null // have shortened code just for demonstration purpose