【发布时间】:2017-06-08 09:36:49
【问题描述】:
我有这个代码 它的功能是搜索和过滤,数据来自this.props.allList,但是它不起作用我认为错误是在状态但我不确定
// 组件.jsx '使用严格';
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>);
}
}
json
{
"count": 3,
"status": "SUCCESS",
"tours": [
{
"title": "item 1",
},
{
"title": "item 2",
},
{
"title": "item 3",
},
]
}
这里是密码笔:http://codepen.io/fernandooj/pen/WROpeg 感谢您的帮助
【问题讨论】:
-
这是您的代码的精确副本吗?如果是这样,您的渲染方法中有无法访问的代码。在您声明
{ filteredData } = this.state;后,您有一个return ( )包装了 map 函数,因此代码停止执行并返回该映射。作为要渲染的内容 -
对不起,我这里的渲染不好,修改代码但还是没有渲染
标签: reactjs redux state immutable.js