Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 如何防止React中的状态不影响变量_Reactjs_State - Fatal编程技术网

Reactjs 如何防止React中的状态不影响变量

Reactjs 如何防止React中的状态不影响变量,reactjs,state,Reactjs,State,我的代码看起来像这样 componentWillMount(){ lotGroups = // backend call to fetch lotgroups setState({ lotGroups )}; } 由于稍后我将更改lotgroup(仅使用setState),我希望存储完整lotgroup集的初始副本。 最好的办法是什么?我尝试将该变量添加到state中,然后在componentWillMount()中更新它,但没有成功。一旦lotGrou

我的代码看起来像这样

componentWillMount(){
    lotGroups = // backend call to fetch lotgroups
    setState({
        lotGroups
    )};
}
由于稍后我将更改lotgroup(仅使用setState),我希望存储完整lotgroup集的初始副本。
最好的办法是什么?我尝试将该变量添加到state中,然后在componentWillMount()中更新它,但没有成功。一旦lotGroups更新,它也会被更新。

您可以在组件中使用这样的状态

 state = {
  lotGroups = 'default value';
}
或内部构造函数

constructor(props) {
super(props);
state = {
  lotGroups = 'default value';
}
}

请不要更新componentWillUpdate()中的状态,它将在状态更新后调用render,从而导致性能问题。不必要的渲染调用。

您可以在组件中使用这样的状态

 state = {
  lotGroups = 'default value';
}
或内部构造函数

constructor(props) {
super(props);
state = {
  lotGroups = 'default value';
}
}

请不要更新componentWillUpdate()中的状态,它将在状态更新后调用render,从而导致性能问题。不必要的呈现调用。

问题是组件的初始状态必须在构造函数中同步设置,即:

constructor (props) {
  super(props)
  this.state = {
    lotGroups = 'initial state'
  }
}
然后,您可以从后端调用异步更新
componentWillMount
中的状态,即:

componentWillMount () {
  fetch('backend.com')
    .then(res => res.json())
    .then(lotGroups => {
      this.setState({
        lotGroups
      })
    })
}
或者如果您使用的是
异步/await

async componentWillMount () {
  const res = await fetch('backend.com')
  const lotGroups = await res.json()

  this.setState({
    lotGroups
  })
}
如果要存储
lotGroups
的内容供以后使用而不引起组件刷新,可以跳过构造函数中的状态设置并使用:

componentWillMount () {
  fetch('backend.com')
    .then(res => res.json())
    .then(lotGroups => {
      this.lotGroups = lotGroups
    })
}
然后您可以稍后将其引用为
this.lotGroups


希望这能有所帮助。

问题是组件的初始状态必须在构造函数中同步设置,即:

constructor (props) {
  super(props)
  this.state = {
    lotGroups = 'initial state'
  }
}
然后,您可以从后端调用异步更新
componentWillMount
中的状态,即:

componentWillMount () {
  fetch('backend.com')
    .then(res => res.json())
    .then(lotGroups => {
      this.setState({
        lotGroups
      })
    })
}
或者如果您使用的是
异步/await

async componentWillMount () {
  const res = await fetch('backend.com')
  const lotGroups = await res.json()

  this.setState({
    lotGroups
  })
}
如果要存储
lotGroups
的内容供以后使用而不引起组件刷新,可以跳过构造函数中的状态设置并使用:

componentWillMount () {
  fetch('backend.com')
    .then(res => res.json())
    .then(lotGroups => {
      this.lotGroups = lotGroups
    })
}
然后您可以稍后将其引用为
this.lotGroups



希望这有帮助。

在构造函数中复制IotGroups。像这样。lotGroups='something'。您可以稍后使用this.iotgroups访问它,但在组件更新之前将调用它,对吗?我的所有提取逻辑都在componentWillUpdate中。lotGroups是包含结果的变量,我想在之后的某个地方保存它。将初始副本保存在另一个变量中???我的意思是在构造函数中初始化并在componentWillUpdate中更新该变量。@aseempadhya我尝试过这样做,但没有用。它仍然在状态更改时得到更新。请在构造函数中保存IotGroups的副本。像这样。lotGroups='something'。您可以稍后使用this.iotgroups访问它,但在组件更新之前将调用它,对吗?我的所有提取逻辑都在componentWillUpdate中。lotGroups是包含结果的变量,我想在之后的某个地方保存它。将初始副本保存在另一个变量中???我的意思是在构造函数中初始化并在componentWillUpdate中更新该变量。@aseempadhya我尝试过这样做,但没有用。它仍然在状态更改时更新。抱歉!!我弄糊涂了。它实际上是组件willmount。不是componentwillupdate。我编辑了这篇文章以反映同样的情况。如果你有任何见解,请告诉我。对不起!!我弄糊涂了。它实际上是组件willmount。不是componentwillupdate。我编辑了这篇文章以反映同样的情况。如果你有任何见解,请告诉我。这正是我现在正在做的。我的初始状态将为空。在componentwillmount中进行后端调用后,它将填充该数组。我希望后端结果存储在某个地方,而不会在状态发生更改时更新。您可以在状态(构造函数)中添加
initialLotGroups:null
,然后只在ajax返回函数中更新它,它是===null吗?@Pandaiolo尝试过这一点。当我使用该空条件时,它不会在componentWillMount(在控制台日志中检查)中得到更新,但不知怎的,它会随着状态得到更新。在这种情况下,您可以简单地设置
this.lotGroups=lotGroups
。这将在组件对象上存储
lotGroups
,而不更新状态,请参阅更新的示例谢谢大家的输入。原来我不小心修改了原始值,因为使用了复制变量上的splice,这将影响原始副本。这正是我现在正在做的。我的初始状态将为空。在componentwillmount中进行后端调用后,它将填充该数组。我希望后端结果存储在某个地方,而不会在状态发生更改时更新。您可以在状态(构造函数)中添加
initialLotGroups:null
,然后只在ajax返回函数中更新它,它是===null吗?@Pandaiolo尝试过这一点。当我使用该空条件时,它不会在componentWillMount(在控制台日志中检查)中得到更新,但不知怎的,它会随着状态得到更新。在这种情况下,您可以简单地设置
this.lotGroups=lotGroups
。这将在组件对象上存储
lotGroups
,而不更新状态,请参阅更新的示例谢谢大家的输入。原来我无意中修改了原始值,因为使用了复制变量上的splice,这将影响原始副本。