【发布时间】:2017-02-21 10:22:02
【问题描述】:
我正在使用 React 和 fetch() 开发 UI,我最终这样做了:
getOperatorsList: function ( obj ) {
fetch( 'http://x.x.x.x/operators.list',
{
method: 'GET',
credentials: 'include'
}
).then( function ( response ) {
return response.json()
} ).then( function ( json ) {
if ( json.statusCode === 3 ) {
cookieService.unsetCookie( 'sessId' );
}
obj.setState( { data: json }, () => obj.forceUpdate() );
} ).catch( function ( ex ) {
console.log( 'parsing failed', ex );
} )
}
这在我的组件 Operators 中调用,看起来像这样
var Operators = React.createClass( {
getInitialState: function () {
return {
data: [{ "data": "Loading" }]
}
},
componentDidMount: function () {
operatorsService.getOperatorsList( this );
},
render: function () {
return (
<div>
<Row >
<Col>
<DataTablesCustom data={this.state.data} />
</Col>
</Row>
</div>
);
}
});
我已经看过this question,但代码对我不起作用。
这很好用,但我真的需要使用forceUpdate() 还是有办法让代码“更干净”?
编辑:在子组件中有一个setState,看起来像这样this.setState({stuff: stuff}, this.function()});。将setState 更改为this.setState({stuff: stuff}, () => this.function()}); 后,我能够删除forceUpdate()。
【问题讨论】:
-
没有 ?
-
没有它,我想要的数据在页面加载时不会显示。
-
所以你有你的答案,你必须使用它;)(这段代码对我来说很清楚)
-
这主要是关于 ReactJS 文档如何说应该避免 forceUpdate() 但我想要另一个观点。谢谢:)
-
@Steeve Pitis 代码看起来一点也不干净。此外,如果他更好地重构代码,他根本不需要打电话给
forceUpdate。
标签: javascript reactjs fetch-api