【问题标题】:How to I empty an array in the state before updating it gain?如何在更新之前清空状态中的数组?
【发布时间】:2020-02-08 14:39:01
【问题描述】:

我想在再次添加之前清空该状态的数组

this.state = {
    arrayOne = [
    {
        name: 'first n',
        last: 'last n'
    },
    {
        name: 'first Name',
        last: 'last Name'
    }
]
}

this.setState({arrayOne: []}) //not emptying the array
this.setState({arrayOne: [...arrayOne.splice()]}) //also not working

【问题讨论】:

  • this.setState({arrayOne: []}) 应该可以正常工作 - 如果您没有得到预期的结果,您需要共享更多代码并解释什么不起作用。请用更好的描述编辑您的问题。

标签: javascript react-native setstate


【解决方案1】:

为什么你说它不起作用?语法看起来不错,应该可以工作

请注意,setState 是一个 async 函数,您需要等待更新完成才能看到更改。

你可以给 setState 传递一个回调函数,它会在设置状态时被执行,就像这样

  this.setState({
       blah: 'something new'
    }, () => {
    console.log(this.state.blah) // will print 'something new'
 } 
}) 

如果您这样做,您将不会立即看到变化:

this.setState({
   blah: 'something new'
})
console.log(this.state.blah) // this will print whatever 'blah' was previously set to, and not 'something new'

【讨论】:

    【解决方案2】:

    像这样试试..

    this.state.arrayOne = [];
    or
    this.state['arrayOne'] = [];
    

    【讨论】:

    • 不要这样设置状态,不会导致重新渲染,导致状态无用。你需要使用 setState
    • 感谢您的详细信息,但我希望这对不需要重新渲染的人有所帮助! @DanielB。
    • 在没有重新渲染的情况下设置状态违背了 React 的目的
    • 虽然这可能是 OP 问题的答案,但 StackOverflow 上的纯代码答案是 discouraged。请考虑在提供的代码中添加一些解释,因为这将使 OP 和未来的访问者都受益。
    猜你喜欢
    • 2021-01-18
    • 2023-01-28
    • 1970-01-01
    • 1970-01-01
    • 2020-10-05
    • 2021-08-07
    • 2021-11-22
    • 1970-01-01
    • 2020-03-10
    相关资源
    最近更新 更多