Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.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 为什么可以';使用useState React Hook“更新状态”;警告:Can';t在未安装的组件上执行React状态更新。这是一个不可行的方案,但我;_Reactjs_React Hooks_Use Effect_Use State_React State - Fatal编程技术网

Reactjs 为什么可以';使用useState React Hook“更新状态”;警告:Can';t在未安装的组件上执行React状态更新。这是一个不可行的方案,但我;

Reactjs 为什么可以';使用useState React Hook“更新状态”;警告:Can';t在未安装的组件上执行React状态更新。这是一个不可行的方案,但我;,reactjs,react-hooks,use-effect,use-state,react-state,Reactjs,React Hooks,Use Effect,Use State,React State,我正在创建一个简单的应用程序,其状态如下 const [questions, setquestions] = useState([ { id: '1', author: 'sarahedo', optionOne: { votes: ['sarahedo'], text: 'have horrible short term memory', }, optionTwo: {

我正在创建一个简单的应用程序,其状态如下

 const [questions, setquestions] = useState([ {
        id: '1',
        author: 'sarahedo',
        optionOne: {
          votes: ['sarahedo'],
          text: 'have horrible short term memory',
        },
        optionTwo: {
          votes: [],
          text: 'have horrible long term memory'
        }
      },
      {
        id: '2',
        author: 'johndoe',
        optionOne: {
          votes: [],
          text: 'become a superhero',
        },
        optionTwo: {
          votes: ['johndoe', 'sarahedo'],
          text: 'become a supervillian'
        }
      },]
此函数更新状态(您不需要了解完整的功能)

我已使用道具将此函数发送到其子组件,当调用此函数时,会出现此错误

警告:无法对已卸载的组件执行React状态更新。这是一个no-op,但它表示应用程序中存在内存泄漏。要修复此问题,请取消useEffect清理函数中的所有订阅和异步任务

就调用子组件(另一个路由器)而言,我是这样调用它的

const onSubmitHandler = (e) => {
        e.preventDefault()
        props.history.location.data.voteHandler(props.location.state.id, selectedOption, props.location.state.dummyLogin)
        props.history.push("/")
    }

我只是在更新状态,我不知道为什么它的行为如此

这通常意味着您试图更新状态的组件已卸载。我看到您正在做一些非常奇怪的事情,比如使用JSON来序列化/反序列化您的状态(一个糟糕的做法/反模式),并使用
数组.prototype.filter
来产生副作用(同样,一个糟糕的做法/反模式,
filter
应该是一个纯函数)。你能给我们提供一个更详细的例子吗?就“JSON序列化/反序列化”而言,我的状态有嵌套对象,我想进行深度复制。下一个操作是根据ID筛选处于状态的对象,然后检查用户是否选择了选项1,将该用户名添加到投票数组中,第二个相同。如何修复此错误?就我的应用程序概述而言,我已将函数“voteHandler”作为道具传递给子组件,子组件将显示一个单选按钮表单,用户可以在其中选择两个选项(在状态中给出),在选择特定选项后,用户名将添加到状态中的“投票”数组中。但是在提交选项时(当调用“voteHandler”时,会出现此错误),如果不查看已卸载的组件,就很难判断。是否有帮助?
const onSubmitHandler = (e) => {
        e.preventDefault()
        props.history.location.data.voteHandler(props.location.state.id, selectedOption, props.location.state.dummyLogin)
        props.history.push("/")
    }