【发布时间】:2019-12-09 17:45:12
【问题描述】:
我有这个文件,我正在为我正在构建的表单字段保留一个 INITIAL_VALUE。
INITIAL_VALUE.js
const INITIAL_VALUE = [];
export default INITIAL_VALUE;
问题是INITIAL_VALUE 是一个数组。一个非原始的,由引用处理。
Component1.js
import INITIAL_VALUE from "./INITIAL_VALUE";
import React, { useState } from "react";
function Component1(props) {
const [myState, setMyState] = useState(INITIAL_VALUE);
const [boolean, setBoolean] = useState(false);
function handleClick() {
setMyState(prevState => {
prevState.push(1);
return prevState;
});
setBoolean(prevState => !prevState);
props.forceUpdateApp();
}
return (
<React.Fragment>
<div>This is my state: {JSON.stringify(myState)}</div>
<button onClick={handleClick}>Modify State Comp1</button>
</React.Fragment>
);
}
export default Component1;
Component2.js
The same as Component1, but it's named Component2 and it has its own file.
App.js
function App() {
const [boolean, setBoolean] = useState(false);
function forceUpdateApp() {
setBoolean(prevState => !prevState);
}
return (
<React.Fragment>
<Component1 forceUpdateApp={forceUpdateApp} />
<Component1 forceUpdateApp={forceUpdateApp} />
<Component2 forceUpdateApp={forceUpdateApp} />
</React.Fragment>
);
}
问题
Component1.js 和Component2.js 都导入INITIAL_VALUE 文件。 我的印象是,这些导入中的每一个都会获得一个全新的 INITIAL_VALUE 对象实例。但事实并非如此,我们可以从下面的 GIF 中看到:
问题
有没有办法将数组作为初始值保持声明并从另一个文件导入,并始终在每次导入时获取对它的新引用?我可以用另一种模式来解决这个问题吗?还是应该只使用原始值并将其设为 null 而不是 [] 并在消费者文件中对其进行初始化?
【问题讨论】:
标签: javascript arrays reactjs object primitive