我有一个有状态的组件(使用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;
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] 删除。
我来说两句