无法在componentWillMount中设置状态

我正在创建一个简单的聊天应用程序,在其中我通过axios对数据库进行api调用,该API返回了一系列消息对象。我可以在componentWillMount中进行axios调用时获取数据。然后,我试图设置状态以显示对话。这是代码:

export default class Chat extends Component {

constructor(props){

super(props);

this.state = {

messages : [],

message : '',

};

this.socket = io('/api/');

this.onSubmitMessage = this.onSubmitMessage.bind(this);

this.onInputChange = this.onInputChange.bind(this);

}

componentWillMount() {

axios.get(`api/messages`)

.then((result) => {

const messages = result.data

console.log("COMPONENT WILL Mount messages : ", messages);

this.setState({

messages: [ ...messages.content ]

})

})

};

我看过一些有关生命周期功能和设置状态的帖子,似乎我在做正确的事情。

再次强调,axios调用正常,设置状态不正常。我仍然看到一个空数组。提前致谢!

编辑:这是专门针对我的问题的解决方案。它被埋在评论中,所以我想把它留在这里。

“我发现了问题。实际上是我解析数据的方式。…messages.content上的散布运算符不起作用,因为messages.content不存在。messages[i]

.content存在。所以我解决的方法是传播……消息,然后在一个子组件中,我将这些对象映射到并解析.content属性。感谢大家的帮助!”

回答:

工作小提琴:https :

//jsfiddle.net/xytma20g/3/

您正在进行异步API调用。因此,setState仅在接收到数据后才调用。它对componentWillMount或不执行任何操作componentDidMount。您需要处理message渲染中的空白。当您从API接收数据时,请将数据设置为状态,然后组件将使用新状态重新渲染,该状态将反映在渲染中。

伪代码:

export default class Chat extends Component {

constructor(props){

super(props);

this.state = {

messages : [],

message : '',

};

this.socket = io('/api/');

this.onSubmitMessage = this.onSubmitMessage.bind(this);

this.onInputChange = this.onInputChange.bind(this);

}

componentWillMount() {

axios.get(`api/messages`)

.then((result) => {

const messages = result.data

console.log("COMPONENT WILL Mount messages : ", messages);

this.setState({

messages: [ ...messages.content ]

})

})

render(){

if(this.state.messages.length === 0){

return false //return false or a <Loader/> when you don't have anything in your message[]

}

//rest of your render.

}

};

以上是 无法在componentWillMount中设置状态 的全部内容, 来源链接: utcz.com/qa/404128.html

回到顶部