Reactjs 无法从componentDidMount中调用setState
我总是收到这样的信息: 警告:设置状态(…):只能更新已安装或正在安装的 组成部分。这通常意味着您在未安装的服务器上调用了setState() 组成部分。这是禁止操作。请检查管理员代码 组成部分 当我使用Reactjs 无法从componentDidMount中调用setState,reactjs,Reactjs,我总是收到这样的信息: 警告:设置状态(…):只能更新已安装或正在安装的 组成部分。这通常意味着您在未安装的服务器上调用了setState() 组成部分。这是禁止操作。请检查管理员代码 组成部分 当我使用setState外部componentDidMount功能时 这是我的源代码: class Admin extends React.Component { constructor(props) { super(props); this.state = {
setState
外部componentDidMount
功能时
这是我的源代码:
class Admin extends React.Component {
constructor(props) {
super(props);
this.state = {
mainModal: false,
itemId: null,
bulkRemove: true,
params: {},
defaultRole: null,
dataLoaded: store.getState().adminReducer.list.length?true:false
};
this.list = this.list.bind(this);
this.toggleModal = this.toggleModal.bind(this);
this.handleFilter = this.handleFilter.bind(this);
this.handleCheck = this.handleCheck.bind(this);
this.handleCheckAll = this.handleCheckAll.bind(this);
this.handleRemove = this.handleRemove.bind(this);
this.handleChange = this.handleChange.bind(this);
this.handlePageChange = this.handlePageChange.bind(this);
this.filterTimeout = null;
}
componentDidMount(){
...
this.list();
// this.setState({dataLoaded: true}); // OK when call here
...
}
list(outerParams={}, page=1){
let params = {
page
};
if(!isEmpty(outerParams)){
params = {...params, ...outerParams};
}
Tools.apiCall(apiUrls.list, params, false).then((result) => {
if(result.success){
console.log(this);
// output of above console.log -> Admin {props: Object, context: undefined, refs: Object, updater: Object, state: Object…}
// this.setState({dataLoaded: true}); // Error when call here or inside setInitData function
this.setInitData(result);
}
});
}
}
当我使用babel preset
es2015
时,一切正常,但与es2016
或es2017
的错误相同 调用list()
方法的是什么,调用组件时组件的状态是什么?错误消息基本上是告诉您在未初始化的组件上调用了它-您在定义“state”之前调用了setState()
。我在componentDidMount函数中调用了。我想在这里面,组件已经初始化了。啊哈-对不起,我错过了。您是否在构造函数中绑定了此.list?react组件上的方法不会自动绑定,因此当您访问它时,此
可能不再是您所认为的。我已更新了代码。我在构造函数中绑定了这个.list函数。当我在list()函数中输入console.log(this)时。我得到了正确的组件,但仍然无法设置状态。