使用setState设置反应页面的所有状态

问题描述 投票:1回答:3

我有一个页面,我将采取页面的整个状态,并设置一些本地存储,所以我需要使用SetState但不使用像理智的人做的一些属性

Sane人

this.setState({ 
  stateProperty:someValue
})

我(我想要实现的目标)

this.setState({
  this.state: {someValues}
})
javascript reactjs jsx
3个回答
1
投票

不,你没有。对不起,你不能。你已经接受了自己是理智的人,但你为什么要尝试疯狂的代码呢?

最好维护具有指定状态的localStorage数据:

state = {
  storeData: {} // or, [], or whatever your stored data type
}
componentDidMount() {
  const storeData = JSON.parse(localStorage.getItem('store-data'))
  this.setState({
     storeData
  })
}

有些人可能会建议您直接在构造函数中初始化localStorage数据。但我反对它,因为我不喜欢对组件造成一些副作用。

PS:在构造函数中实际使用localStorage数据没有副作用。我刚刚建议使用componentDidMount钩子,因为你可能需要调用一些api来调用加载localStorage数据,那时你可能会有一些副作用。要忽略这一点,请使用componentDidMount钩子,因为它是一个在后台运行的异步函数。


0
投票

也许你可以这样做:

const updateState = window.localStorage.getItem('whatever');
let newState = Object.assign({}, this.state);
newState = updateState;
this.setState({newState});

希望它有效。


0
投票

看起来你实际上可以在构造函数上调用this.state = {something}

这样做了

constructor(props) {
        super(props);

          if ( typeof store.get([store.get("auth").ID]) === "undefined") {
              store.set([store.get("auth").ID], { localStorageData: {} });
          }

          this.state = {
              ...bla bla bla
          }

          this.state=Object.assign({}, this.state, this.state.localstore ) 
   }
© www.soinside.com 2019 - 2024. All rights reserved.