状态未使用setState进行更新反应

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了状态未使用setState进行更新反应相关的知识,希望对你有一定的参考价值。

提前谢谢你看看我的问题。所以我通过submitItem函数从CreateItem组件发送到DB,然后当返回promise时,我调用pullAllItems来获取我的DB的categories表的所有行以更新类别的状态:

反应组件:

import React, { Component } from 'react';
import CreateItem from './components/CreateItem';
import Categories from './components/Categories';

// stylesheets
import './stylesheets/App.css';

class App extends Component {
  constructor() {
    super();
    this.state = {
      categories: [],
      tasks: []
    };

    this.submitItem = this.submitItem.bind(this);
    this.pullAllItems = this.pullAllItems.bind(this);
  }

  componentWillMount() {
    fetch('/api/categories')
      .then(res => res.json())
      .then(res => {
        this.setState({
          categories: res
        });
      });
  }

  submitItem(title) {
    const category = {
      title
    }

    fetch('/api/categories', {
      method: 'POST',
      body: JSON.stringify(category),
      headers: new Headers({
        'Content-Type': 'application/json'
      })
    }).then(this.pullAllItems('categories'));
  }

  pullAllItems(type) {
    const key = type;
    let obj = {};

    fetch('/api/' + type)
      .then(res => res.json())
      .then(res => {
        obj[key] = res;
        this.setState({
          obj
        }, () => {
          console.log(this.state.categories);
        });
      });
}

  render() {
    return (
      <div className="App">
        <CreateItem submitItem={this.submitItem} />
        <Categories categories={this.state.categories} pullAllTasks={this.pullAllItems}/>
      </div>
    );
  }
}

如果我控制台记录响应,我得到了使用submitItem函数POST的附加行;但是,当我更新pullAllItems函数中的类别状态时,状态不会更新(即使在setState的回调函数中)。我是新来的反应,并且到处寻找我能看到我所缺少的东西,但无法在任何地方获得明确的答案。任何帮助是极大的赞赏!

答案

我想你会想做this.setState(obj),以便动态密钥合并到状态。

以上是关于状态未使用setState进行更新反应的主要内容,如果未能解决你的问题,请参考以下文章

反应:在构造函数上绑定方法时,在 setState 内实现计时器,状态属性未定义

反应功能组件未从父组件更新 setState

在setState之后反应状态未定义? [复制]

尝试在反应组件的返回中使用 setstate 更新状态并获得“最大更新深度超出错误”?

反应挂钩以根据先前的状态值更新状态[重复]

更新后如何将函数传递给 SetState 回调? (反应)