Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 更新状态不需要';t使用道具react redux connect重新渲染子对象_Reactjs_React Redux - Fatal编程技术网

Reactjs 更新状态不需要';t使用道具react redux connect重新渲染子对象

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}/> 在这种情况下,我只是胡闹,并不打算实际做任何事情,但这会

我刚刚开始使用React-Redux,所以我只是在我的一些旧东西上玩它。 我有一个需要道具的组件:

 <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)