Reactjs 更新状态不需要';t使用道具react redux connect重新渲染子对象
我刚刚开始使用React-Redux,所以我只是在我的一些旧东西上玩它。 我有一个需要道具的组件:Reactjs 更新状态不需要';t使用道具react redux connect重新渲染子对象,reactjs,react-redux,Reactjs,React Redux,我刚刚开始使用React-Redux,所以我只是在我的一些旧东西上玩它。 我有一个需要道具的组件: <DataTable dataType = {this.state.dataType} drinkArray = {this.state.drinkArray} foodArray = {this.state.foodArray} sort = {this.sort}/> 在这种情况下,我只是胡闹,并不打算实际做任何事情,但这会
<DataTable dataType = {this.state.dataType}
drinkArray = {this.state.drinkArray}
foodArray = {this.state.foodArray}
sort = {this.sort}/>
在这种情况下,我只是胡闹,并不打算实际做任何事情,但这会导致一种奇怪的行为,我无法解释。
我通过props传递的sort函数不再导致DataTable重新呈现。但是,如果通过单击按钮更改父级的数据类型,则DataTable不会重新呈现。sort函数和更改数据类型都使用setState(),我知道通过将其记录到控制台,sort函数正在被调用并正常工作。调用sort函数时,也会重新呈现父级。如果我从DataTable组件中删除connect,sort函数将再次重新呈现DataTable
所以我的问题是,为什么通过setState更改一个道具会导致子对象重新渲染,而通过setState更改另一个道具却不会?这只是一个普通的好奇问题。connect()
做了一个肤浅的比较(作为优化)-可能排序
只会变异现有数组,它应该创建一个新对象(新引用)
<div sytle = {{textAlign: 'center'}}>
{(this.props.dataType === 'food' &&
<table className = 'foodTable'>
<tbody>
<tr>
<th>Name</th>
<th id = 'price' onClick = {(e) => {this.props.sort(e,'food')}}>Price</th>
<th id = 'stock' onClick = {(e) => {this.props.sort(e,'food')}}>Stock</th>
</tr>
{this.props.foodArray.map((x,i) => {
return (
<tr key ={i}>
<td>{x.name}</td>
<td>{x.price}</td
<td>{x.stock}</td>
</tr>
)
})
}
</tbody>
</table>
)}
//etc.
export default connect()(DataTable)