Reactjs setState不使用不可变的
我有这个密码 它的功能是搜索和过滤,数据来自this.props.allList,但它不起作用。我认为错误在状态中,但我不确定 //component.jsx "严格使用",Reactjs setState不使用不可变的,reactjs,redux,state,immutable.js,Reactjs,Redux,State,Immutable.js,我有这个密码 它的功能是搜索和过滤,数据来自this.props.allList,但它不起作用。我认为错误在状态中,但我不确定 //component.jsx "严格使用", import React, {Component} from 'react'; import PureRenderMixin from 'react-addons-pure-render-mixin'; import Immutable from 'immutable'; export default cla
import React, {Component} from 'react';
import PureRenderMixin from 'react-addons-pure-render-mixin';
import Immutable from 'immutable';
export default class ListComponent extends Component {
constructor(props) {
super(props);
this.state = {
allList: Immutable.List(),
filteredData: Immutable.List(),
};
this.shouldComponentUpdate = PureRenderMixin.shouldComponentUpdate.bind(this);
}
componentWillMount() {
this.setState({
allList: Immutable.fromJS(this.props.allList).toList(),
filteredData: Immutable.fromJS(this.props.allList).toList()
});
}
filterData(event) {
event.preventDefault();
const regex = new RegExp(event.target.value, 'i');
const filtered = this.state.allList.filter(function(datum) {
return (datum.get('name').search(regex) > -1);
});
this.setState({
filteredData: filtered,
});
}
render() {
const { filteredData } = this.state;
const prettyRows = filteredData.map(function(datum) {
return (
<tr>
<td>{ datum.get("status") }{datum.status}</td>
<td>{ datum.get("count") }{datum.count}</td>
</tr>
);
});
return(
<div>
<input
type="text"
className="form-control"
onChange={ this.filterData.bind(this) }
placeholder="Search" />
<table
<thead>
<tr>
<th>id </th>
<th>Name</th>
</tr>
</thead>
<tbody>
{ prettyRows }
</tbody>
</table>
</div>);
}
}
这里是代码笔:
谢谢你的帮助
React.render(
只有列表是不可变的结构,而不是其中的对象,因此您不必使用datam.get('name'),datam.name可以工作
React.render(
只有列表是不可变的结构,而不是其中的对象,因此您不必使用datam.get('name'),datam.name可以工作
这有助于将您的存储保持为“单一真实来源”,并保持组件“干燥”。问题可能是由变量
prettyRows
引起的。问题可能是由于没有变量datum.get(“status”)或datum.status
您能否提供更多信息,如控制台中的错误?问题可能是由变量
prettyRows
引起的。问题可能是由于没有变量datum.get(“状态”)或datum.status
造成的
您能否提供更多信息,如控制台中的错误?您的反应包括错误:
- 删除“”->该版本与用作核心的react 0.13不匹配
- 注释
,因为这不再有效this.shouldComponentUpdate=PureRenderMixin.shouldComponentUpdate.bind(this);
et voile您的反应包括错误:
- 删除“”->该版本与用作核心的react 0.13不匹配
- 注释
,因为这不再有效this.shouldComponentUpdate=PureRenderMixin.shouldComponentUpdate.bind(this);
et voile这是您的代码的精确副本吗?如果是,则呈现方法中存在无法访问的代码。在声明
{filteredData}=this.state;
后,您有一个返回()
包装映射函数,使代码停止执行并返回该映射。作为要渲染的内容抱歉,我在此处渲染不好,并修改代码,但仍然无法渲染这是您的代码的精确副本?如果是,则在您的渲染方法中存在无法访问的代码。在您声明{filteredData}=this.state;
您有一个return()
包装映射函数,以便代码停止执行并返回该映射。作为要渲染的内容抱歉,我在这里渲染不好,并修改了代码,但仍然没有渲染。为了您的帮助,如果我放置console.log(this.props.allList),我没有错误很好地为我提供了json,但在渲染时不起作用问题:如果在映射项中调用{datum.status}
,为什么需要使用{datum.get(“status”)}
?如果我没记错的话,data.status应该已经是值了。可以在datum下添加调试器或console.log来检查试图返回的值。感谢您的帮助,如果我将console.log(this.props.allList)放在很好地为我提供了json,但在渲染时不起作用问题:如果在映射项中调用{datum.status}
,为什么需要使用{datum.get(“status”)}
?如果我没记错的话,data.status应该已经是值了。也许可以在datum下添加一个调试器或console.log来检查试图返回的值。嗨,谢谢你的帮助:我认为这不是问题,我认为问题出在我将json放入状态时。嗨,谢谢你的回答,这实际上是我正在查找的例如,现在我有另一个问题,当我将它传递到我的测试环境时,我从redux获取数据,并将其保存在存储中,但这种方式对我不起作用,如果我加载console.log(this.Props.list),但是如果我加载console.log(this.state.lis)
{
"count": 3,
"status": "SUCCESS",
"tours": [
{
"title": "item 1",
},
{
"title": "item 2",
},
{
"title": "item 3",
},
]
}