为什么此React Hooks组件内部状态未更新?

巴鲁克·阿尔玛格(Baruc Almaguer)

我有一个有状态的组件(使用react挂钩)和一个无状态的布局组件。状态行为异常,如在有状态组件内部定义的2个函数中,一个函数获取状态的当前值,另一个函数获取状态的默认值。

React版本:16.12.0

片段(代码沙盒https://codesandbox.io/s/sweet-smoke-tpjge上的完整版本):

import React, { useState } from "react";
import MapLayout from "./MapLayout";

function Map(props) {
  const [editMode, setEditMode] = useState(false);
  const items = [
    { id: 0, name: "item 0", pos: { x: 0, y: 0 } },
    { id: 1, name: "item 1", pos: { x: 0, y: 100 } }
  ];
  function onItemClick(item) {
    if (!editMode) return; // ! Expected to change with state
    console.log("On Edit mode"); // ! Never prints
  }
  function onMapClick(item) {
    if (!editMode) return; // ! this works fine
    console.log("On Edit mode"); // This prints OK
  }
  console.log("rerender, editMode value: ", editMode);
  return (
    <MapLayout
      editMode={editMode}
      toggleEditMode={() => {
        setEditMode(!editMode);
      }}
      items={items}
      onItemClick={onItemClick}
      onMapClick={onMapClick}
    />
  );
}

export default Map;

重现步骤

  1. 打开控制台日志
  2. 单击任何青色项(应记录项索引和editMode值)
  3. 单击地图(白色区域,应记录“ MAP单击”和editMode值)
  4. 单击切换按钮(应将editMode值更改为true)
  5. 单击地图(应记录相同的消息以及“在编辑模式下”)
  6. 单击任何青色项(应记录相同的消息,并加上“在编辑模式下”,但不是

当前行为

EditMode值在“ onItemClick”函数上不会更改,但在“ onMapClick”函数中会更改

预期的行为

EditMode值应在其作用域内的所有函数定义中保持一致

高丽

我想到了

在Flowpoint.jsthis.onClick = props.onClick;的构造函数中进行设置时,您会感到无所适从

这样做的问题是this.onClick道具更新时永远不会更新,因此它保持为传递给它的第一个函数。

代替该行,在Flowpoint.js中执行此操作

onMouseUp(e) {
   // Trigger user-defined onClick?
   if (!this.didDrag) this.props.onClick(e);
   ...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

父状态更改后,React子组件未更新

为什么我无法更新我的React组件的状态?

更新的状态值未反映在React的setInterval()内部

状态更改时React组件未更新

Redux-状态正在更新,但React组件未更新

为什么React-Native的图像组件中出现此错误?

当状态更改为Redux时,React组件未更新

React Hooks-作为prop传递的函数组件内部的函数无法访问状态

官方React教程,使用Hooks-组件未更新

React钩子:无法更新函数组件内部的状态

ReactJS:无法在未安装的组件上执行React状态更新

为什么React Hooks不更新数据

React无法对未安装的组件错误执行React状态更新

使用promise Hooks React JS跟踪组件外部状态的更新

为什么更新状态未反映在事件侦听器中:React Native,Hooks

React:无法在未安装的组件上执行React状态更新

React Redux状态更新未反映到相关组件

React Hooks:useState updater函数:为什么此钩在拖动时会删除对象?

无法在未安装的组件上执行React状态更新

React类组件未更新状态

React测试库:测试内部的更新未包装在act(...)中,并且无法在已卸载的组件上执行React状态更新

状态在React组件中滚动时未更新?

React Hooks,状态未更新

React 组件正在渲染但在状态更新时未更新

无法对 reactjs 中未安装的组件执行 React 状态更新

如果任何状态发生变化,为什么 React Hooks 会更新所有子组件?

React - 无法对未安装的组件执行 React 状态更新

未使用 mapStateToProps 将 Redux 状态更新为 React 组件

React 状态正在更新但组件未更新