javascript - 根据数组值设置状态值 React + ES6

标签 javascript reactjs ecmascript-6

我的 react 中有一个状态变量:

this.state = {
    formStatus : {
        approved : true,
        rejected : true,
        pending  : true
    }
}

以及一个动态数组,其值可以包含其中一个或所有这些值

appliedFilters = ['approved', 'rejected', 'pending']

现在我想要做的是,如果数组不包含状态键,则将它们设置为 false。

例如,如果数组是['approved', 'rejected'],那么我的状态应该设置为:

this.state = {
    formStatus : {
        approved : true,
        rejected : true,
        pending  : false
    }
}

如果可能的话,我想使用ES6 map()来实现。

我已经做了类似的事情,但它不起作用:

appliedFilters.map(filter => {
    this.setState(prevState => ({
        formStatus: prevState.formStatus.map(
            status => (status === filter) ? true : false
        )
    }))
})

最佳答案

您无法使用 map 构建对象。而且您不需要 forEach 因为这里不需要突变。 map 适用于(并返回)集合。您应该使用reduce

const appliedFilters = ['approved', 'rejected']

const state = ['approved', 'rejected', 'pending'].reduce((newState, item) => ({
    ...newState,
    [item]: appliedFilters.includes(item)
}), {});

this.setState(state);

关于javascript - 根据数组值设置状态值 React + ES6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52269455/

相关文章:

javascript - 我们可以直接将Windows Azure移动服务与BLOB存储连接起来吗?

javascript - map 未定义 React JS

reactjs - 禁用 eslint 警告

javascript - 使用 Node 或 ES6 从 JSON 中过滤记录

javascript - defaultProps 在 ReactJs 中有效吗

javascript - 创建一个以 ".js"结尾并返回 JavaScript 的 MVC 路由?

javascript - 如何在 React 中测试从子组件提升到父组件的状态?

javascript - fetch 返回 SyntaxError : Unexpected token T in JSON at position 0

javascript - 我可以使用 Webpack 将 Google Charts 注入(inject)我的项目吗?

javascript - 不在 if 语句中将 int 转换为字符串