Javascript 为什么不应该';您是否在本地组件状态中存储redux存储状态?
我以前曾询问过一个关于react组件状态的问题,它与Redux状态一起工作。下面的第一个代码链是我解决这个问题的原始建议,第二个是我得到的答案,建议我不要复制redux状态。这是因为复制速度慢吗?在本地州存储尽可能少的数据,然后由JS负责排序,这会更快吗 与此相关的是,第二个代码链要求我始终使用返回对象的函数,这让人感到奇怪。这是唯一的路吗?我知道在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.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组件状态时
您的代码中没有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>
)
}
}