Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.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
Javascript 为什么不应该';您是否在本地组件状态中存储redux存储状态?_Javascript_Reactjs_Ecmascript 6_Redux_React Redux - Fatal编程技术网

Javascript 为什么不应该';您是否在本地组件状态中存储redux存储状态?

Javascript 为什么不应该';您是否在本地组件状态中存储redux存储状态?,javascript,reactjs,ecmascript-6,redux,react-redux,Javascript,Reactjs,Ecmascript 6,Redux,React Redux,我以前曾询问过一个关于react组件状态的问题,它与Redux状态一起工作。下面的第一个代码链是我解决这个问题的原始建议,第二个是我得到的答案,建议我不要复制redux状态。这是因为复制速度慢吗?在本地州存储尽可能少的数据,然后由JS负责排序,这会更快吗 与此相关的是,第二个代码链要求我始终使用返回对象的函数,这让人感到奇怪。这是唯一的路吗?我知道在React.createClass中,可以存储变量来保存对象等,但在es6的扩展组件版本中,似乎必须使用函数。有办法解决这个问题吗?还是就是这样 c

我以前曾询问过一个关于react组件状态的问题,它与Redux状态一起工作。下面的第一个代码链是我解决这个问题的原始建议,第二个是我得到的答案,建议我不要复制redux状态。这是因为复制速度慢吗?在本地州存储尽可能少的数据,然后由JS负责排序,这会更快吗

与此相关的是,第二个代码链要求我始终使用返回对象的函数,这让人感到奇怪。这是唯一的路吗?我知道在
React.createClass
中,可以存储变量来保存对象等,但在es6的扩展组件版本中,似乎必须使用函数。有办法解决这个问题吗?还是就是这样

const Table = React.createClass({
  getInitialState () {
    return {contacts: []}
  },
  componentWillReceiveProps () {
    this.setState({ contacts: this.props.data.contacts})
  },
  sortContacts (parameter, e){
    ...
  },
  render () {
    return (
      <table>
        <thead>
          <tr>
            <th onClick={this.sortContacts.bind(this, "firstName")}>First Name</th>
          </tr>
        </thead>
        <tbody>
          {contactRows}
        </tbody>
      </table>
    )
  }
})
const Table=React.createClass({
getInitialState(){
返回{联系人:[]}
},
组件将接收道具(){
this.setState({contacts:this.props.data.contacts})
},
sortContacts(参数,e){
...
},
渲染(){
返回(
名字
{contactRows}
)
}
})
vs

const表扩展了React.Component{
建造师(道具){
超级(道具);
此.state={
排序方式:“id”//默认排序参数
}
}
sortContacts(参数){
this.setState({sortBy:param})
}
分类联系人(){
返回this.props.contacts.sort(…);//返回已排序的集合
}
render(){
返回(
this.sortContacts(“firstName”)}>First Name
{this.sortedContacts()}
)
}
}

首先让我澄清您的疑问,当您应该使用React组件状态时

  • 如果某些内容仅在组件处于活动状态时存储,请使用“反应状态”
  • 如果您希望有人看到与之前相同的组件ui,即使在对其他组件执行其他操作后返回,也可以使用Redux
  • 现在谈谈数据过滤 我们同时使用State和Redux

  • 我们使用state从name中过滤数据,因为我们不希望他在返回页面时看到相同的过滤数据,因为这会造成混乱

  • 为了过滤价格或其他过滤器上的数据,我们存储实际数据,并在Redux中过滤数据

  • 由于我们将实际数据存储在redux和过滤器中,所以在数据发送到组件(即MapStateToProps)之前,我们应用了过滤器算法。 e、 数据:getFilteredData(state.somestate.data,state.somestate.filters) 其中getFilteredData是一个函数,它接受数据并过滤并返回过滤后的数据


  • 您的代码中没有Redux,您的问题似乎与Redux无关

    第二个代码块使用ES6类。谷歌搜索一下,看看你能用它们做些什么

    在Redux中,组件最好是无状态的。它们从Redux或父级接收数据,而不存储任何内容。所以没有
    setState
    。该表不会对任何内容进行排序(它将接收排序后的天数作为道具),或者它可能会进行排序,但不会是state,它将在
    渲染中对其进行排序。当然,它会对副本进行排序,而不是对传入的
    prop
    进行排序

    这些听起来很疯狂,当然。每次渲染都很抱歉?大家,表演怎么样!?答案是回忆录。使用选择器(重新选择软件包)


    在Redux中存储每一位数据的原因是:单一的真相来源。它允许时间旅行和热重新加载。登录中。状态保存/恢复。它可以防止在哪些数据是最新的或正确的问题上出现分歧。还有更多,但这个问题的内容太多。

    这个问题与Redux存储相关,但给出的代码仅为React.js代码,根本没有实现Redux存储。
    const Table extends React.Component {
      constructor(props) {
        super(props);
        this.state = {
          sortBy: 'id' // default sort param
        }
      }
    
      sortContacts(param) {
        this.setState({ sortBy: param})
      }
    
      sortedContacts() {
        return this.props.contacts.sort(...); // return sorted collection
      }
    
      render() {
        return (
          <table>
            <thead>
              <tr>
                <th onClick={() => this.sortContacts("firstName")}>First Name</th>
              </tr>
            </thead>
            <tbody>
              {this.sortedContacts()}
            </tbody>
          </table>
        )
      }
    }