javascript - 如何通过过滤获取的数据来更新状态?

标签 javascript database reactjs fetch

大家好,我正在尝试从我的数据库中获取数据, 看起来像这样:

inputData: {
  formID: '',
  inputArr: [],
  labelArr: []
}

但我只想在状态中放入特定的 formID 字符串,基本上过滤它们,我该怎么做?

这是我的获取代码

componentWillMount() {
  fetch('/api/datas')
    .then(data => data.json())
    .then(datas =>
      this.setState(state => ({ inputDataArr: [state.inputDataArr, ...datas] }))
    );
}

state = {
  inputDataArr: []

};

例如,我只想推送那些 formID 为 3 的表单,非常感谢您的帮助!

最佳答案

您可以在更新状态之前过滤数据。这是一个工作示例。

const datas = [
  {
    formID: '3',
    inputArr: ["foo"],
    labelArr: ["foo"]
  },
  {
    formID: '4',
    inputArr: ["bar"],
    labelArr: ["bar"]
  },
  {
    formID: '3',
    inputArr: ["baz"],
    labelArr: ["baz"]
  },
];

const fakeRequest = () =>
  new Promise(resolve => setTimeout(() => resolve(datas), 1000));

class App extends React.Component {
  state = {
    inputDataArr: [],
  }

  componentDidMount() {
    fakeRequest()
      .then( datas => {
        const filterdDatas = datas.filter( data => data.formID === "3");
        this.setState( currentState => ({
          inputDataArr: [ ...currentState.inputDataArr, ...filterdDatas ]
        }))
      })
  }
  render() {
    console.log( this.state );
    return <div>Check the console.</div>;
  }
}

ReactDOM.render(<App />, document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"></div>

我在这里模仿请求,但您可以在最后一个 .then 方法中应用相同的逻辑。另外,请使用 componentDidMount 而不是 componentWillMount,因为它将被弃用。

关键部分是:

const filterdDatas = datas.filter( data => data.formID === "3");
    this.setState( currentState => ({
        inputDataArr: [ ...currentState.inputDataArr, ...filterdDatas ]
    }));

我们正在过滤相关数据,然后使用当前数据更新状态。只是,不要忘记在此处展开​​当前的 inputDataArr ,否则您会得到一个数组的嵌套数组以及除此之外的其他数据。

关于javascript - 如何通过过滤获取的数据来更新状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52488099/

相关文章:

javascript - 仅获取数组的唯一值

javascript - 在jquery文件上传插件的fileuploadsend事件中检索jqXHR?

mysql - 如何为现有表中的列添加索引?

php - 如何使用已弃用的 mysql_* 函数成功重写旧的 mysql-php 代码?第二部分

sql - 获取给定 ID 的根节点和叶节点 - 如何?

javascript - 使用 reactjs (JSX) Bootstrap 弹出窗口

javascript - 是否有一种惯用的方法来使用 Prototype 库监听 DOM 的更改?

javascript - 自动为页面上的链接添加书签的脚本

javascript - 如何在页面顶部隐藏导航栏

reactjs - 当变体是临时的时,样式化的 MUI 抽屉无法打开