javascript - 使用简写更新对象数组和 setState

标签 javascript reactjs ecmascript-6

试图使用较短的版本重写我的更新对象数组,但失败了,我有一个工作版本, 它在 setState 之前分配给临时变量。

//working version
const new_items = (this.state.new_items || []).map((o, i) => {
    if(i === idx) {
        return e.target.value
    }
    return o
})
this.setState({
    items: new_items
})

//shorter version but why snytax error?
this.setState({
    items: (this.state.items || []).map((o, i)=> ({
        i === idx ? e.target.value : o
    }))
})

最佳答案

您需要返回e.target.valueo。事实上,您的 map 函数的内部只是一个孤立的表达式,没有连接到任何东西,因此不起作用。

最好的办法是通过删除 { } 来让箭头函数隐式返回:

this.setState({
  items: (this.state.templates || []).map((o, i) => (
    i === idx ? e.target.value : o
  ))
});

关于javascript - 使用简写更新对象数组和 setState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50710615/

相关文章:

javascript - 如何使用Lodash根据对象的嵌套属性值选择对象的属性?

javascript - 如何创建一个空的 JQuery 元素并填充它?

javascript - 如何查看 ExtJs 类中方法的完整列表

Javascript:如何将具有特定索引的数组传递给函数?

javascript - 使用 React hooks 反转数组

reactjs - 带 React Helm 的 Razzle : Meta tags displayed wrong in crawlers when using dynamic values from Axios

javascript - 通过 Javascript WeakMaps 收集垃圾的缓存

JavaScript 变量定义 : Commas vs. 分号

javascript - 无法使用 req.session 在特定路由中设置未定义的属性 'X'

reactjs - 使用 immer 将 Redux 状态数组替换/更改为其他数组