javascript - 在 React.js 中使导入的对象具有反应性
问题描述
我在 mydata.js 文件中有一个对象:
const myData = {
name: 'John',
lastname: 'Smith'
}
export default myData
在 React 组件中,我导入该对象并通过道具将其传递给组件并放入页面
import myData from './mydata.js'
const ParentComponent = () => {
return (
<ChildComponent info={myData} />
)
}
然后例如在另一个组件中,我们将其命名为 DataChanger 我更改了 myData 对象中的一个字段:
import myData from './mydata.js'
const DataChanger = () => {
const onChangeDataHandler = () => {
myData.name = 'David'
}
return (
<div>
<button onClick={() => onChangeDataHandler()}>Data Changer</button>
</div>
)
}
在这种情况下,当我单击按钮并更改字段时,我没有通过道具更改子组件。是否可以使 myData 具有反应性?
解决方案
// You need to use state
import initialData from './mydata.js'
const ParentComponent = () => {
const [myData, setMyData] = useState({ ...initialData });
const onChangeHandler = (newData) => {
setMyData({ ...myData, ...newData });
};
return (
<>
<ChildComponent info={myData} />
<DataChanger onChangeHandler={onChangeHandler} />
</>
);
}
// Then
const DataChanger = (props) => {
const onButtonClick = (event) => {
const newData = { name: 'David' };
props.onChangeHandler(newData);
};
return (
<div>
<button onClick={onButtonClick}>Data Changer</button>
</div>
);
}
推荐阅读
- sql - 回滚事务
- javascript - 使用服务器而不是本地计算机时,我应该用什么替换“http://localhost:3000”?
- javascript - 我如何在java脚本中创建一个对象数组
- python - 为什么 Scrapy.response.follow() 在迭代中随机抓取链接列表?因为递归?如何解决?
- angular - 网站上的Angular项目刷新结果404页面
- flutter - 点击屏幕时调试控制台中的“opservice is null false”消息
- python - 检查它是否是Python中任何组的子集的有效方法
- python - PYTHON-记录到文件并将 DEBUG 语句打印到控制台
- c# - 使用 C# 在 Linux 中读取锁定文件
- javascript - d3.js hexbin - 适应阈值比例