Javascript 当父组件状态更改时,强制更新子组件
我有一个MyList组件,用于获取项目,允许筛选和排序。该组件已经在应用程序的其他部分中使用,并且运行良好。它使用渲染道具渲染项目,因此它接受函数类型的renderItem道具 现在,我正在构建一个简单的列表,允许使用前面提到的组件选择项目,并在render prop renderItem方法中检查所选状态。问题是,当我更改MySelectableList的状态时,MyList组件不会更新,因为它的props不会更改,它始终是相同的绑定函数renderProp。现在,我强制使用this.renderItem=this.renderItem.bindthis呈现子对象;但我不喜欢它,我知道我可以用ref更新子组件,但我也不喜欢它 是否有更好的方法在父组件状态更改时强制子组件渲染?我做错什么了吗 MySelectableList的完整代码: 提前谢谢 编辑 MyList组件使用connect连接到redux存储。我发现connect是MyList组件缺少渲染的原因,仅使用vanilla react组件就可以正常工作 我在这个代码沙盒中重现了这个问题:,因为您询问了如何以更友好的方式进行操作 更好的方法是:Javascript 当父组件状态更改时,强制更新子组件,javascript,reactjs,react-redux,Javascript,Reactjs,React Redux,我有一个MyList组件,用于获取项目,允许筛选和排序。该组件已经在应用程序的其他部分中使用,并且运行良好。它使用渲染道具渲染项目,因此它接受函数类型的renderItem道具 现在,我正在构建一个简单的列表,允许使用前面提到的组件选择项目,并在render prop renderItem方法中检查所选状态。问题是,当我更改MySelectableList的状态时,MyList组件不会更新,因为它的props不会更改,它始终是相同的绑定函数renderProp。现在,我强制使用this.rend
render () {
return (
<div>
<MyList {...whateeverExtraPropsyouWantToPass}>
<MySelectableItem
key={ item.uuid }
item={ item }
toggle={ this.toggle }
selected={ this.isSelected(item) } />
</MyList>
</div>
);
那么您的MyList将如下所示:
render () {
return (
<div>
...//your other MyList code
...
{this.props.children}
</div>
);
这看起来更可读、更易于维护和调试。但我相信这对你来说是显而易见的。因为,你问了一个反应友好的方式,这是你能做的最反应友好的方式
我不建议不必要的,显式地尝试呈现任何组件。除非这是唯一的方法,否则组件中不会出现这种情况。实现MyList的方法没有问题。React Native FlatList具有相同的模式。但是,为什么不将项目作为属性传递给MyList,这样就可以
这样,MyList将重新呈现,因为items属性发生更改。items属性也是必需的,因为我假设在MyList组件中,您需要执行items.map函数,对吗?否则,您如何知道总共需要渲染多少项?为什么要重新渲染?父母和孩子之间没有约束力吗?您没有将状态作为道具传递。您不能将renderItem作为道具传递,而是将其作为子项传递@nitte93user3232918。谢谢您的输入。我知道它不会重新渲染,我理解为什么这个.renderItem不会改变,我在问是否有一种更好的方法来触发渲染,或者我是否必须以某种方式改变整个设计。我无法将MySelectedItem作为子项传递,因为实际的项由子组件MyList管理。谢谢,我理解您的建议,但我的示例中的项是由MyList获取和管理的,因此我无法实例化,也无法访问父范围中的项。谢谢您的回复,不幸的是,项目是由MyList组件直接获取和管理的,我不知道父组件中的项目。
render () {
return (
<div>
...//your other MyList code
...
{this.props.children}
</div>
);