- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个 React 类,它想要渲染如下所示的对象:
data: {
title: "haha",
description: {
country: "US",
year: "1996"
}
}
但是,当 React 想要渲染它时,它会报错。
Uncaught Error :不变违规:receiveComponent(...):只能更新已安装的组件
我认为问题出在 getInititalState,我将我的数据声明为一个空对象,所以当我在超时后获得我的完整数据对象时,React 将尝试将我的数据对象映射到组件,但它给出了错误。
但一件有趣的事是,我访问this.props.title.title没有问题,但访问this.props.title.description.country没有问题,它将给出未定义的
但是,当我对它进行 console.log 时,我可以看到我的对象。但是 React 无法访问它!
我的猜测是,当 React 从空对象初始化时,它只会用数据对象的第一层和第二层初始化虚拟 DOM。
这就是原因,当我尝试访问 this.props.data.data.title 时可以,但不能访问 this.props.data.data.description.country
下面是我的代码
var BookBox = React.createClass({
getInitialState: function() {
return { data: {} };
},
componentWillMount: function() {
var that = this;
setTimeout(function() {
console.log('timeout');
that.setState({
data: {
title: "haha",
description: {
country: "US",
year: "1996"
}
}
});
}, 2000);
},
render: function() {
return (
<div>
<h1>{this.state.data.title}</h1>
<TestBox title={this.state.data} />
</div>
);
}
});
var TestBox = React.createClass({
render: function() {
console.log(this.props.title);
return (
<div>
<p>{ this.props.title.description.country }</p>
<p>{ this.props.title.title }</p>
</div>
);
}
})
我可以知道处理这个问题的最佳方法是什么吗?我应该在 getInitialState 中初始化我的数据对象结构还是有更好的方法?
最佳答案
我想你得到了 Can only update a mounted component
错误,因为您正在使用 componentWillMount
和 settimeout
在一起,但您不知道该组件是否已在时间 settimeout
之前安装函数触发。
既然你事先知道你的状态是什么,我认为最好从getInitialState
返回你的数据。功能。
您还可以使用 componentDidMount
而不是 componentWillMount
功能。这样你就可以确定组件在 componentDidMount
时被挂载了。被称为。
任何时候你使用像 settimeout
这样的异步函数或者 xhr 调用,你应该使用 this.isMounted()
在回调函数中,检查组件在回调触发时是否仍处于挂载状态。
例如,如果您事先不知道状态,您可以在 componentDidMount
中触发一个 xhr 调用函数,检查 this.isMounted()
在成功回调和setState
.
至于<p>{ this.props.title.description.country }</p>
上的错误行:初始渲染this.state.data
(BookBox) 是一个空对象,this.props.title
也是。 (测试箱)。访问空对象的 ( { }
) title
属性是 undefined
.没问题。正在访问 description
也是undefined
.但是访问 undefined
的 country
是错误。为避免此错误,您可以创建一个 description
变量:description = this.props.title.description || {}
并使用 <p>{description.country}</p>
以确保您的代码在 this.props.title
时不会中断是空的。
关于javascript - 在挂载之前 react 处理空对象的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28624759/
我正在尝试创建1-click快捷方式,以便在上小学时玩一些90年代的旧游戏。 我正在尝试将ISO挂载到特定驱动器 运行程序 确保已卸载驱动器,以清除下一个要清除的游戏 我是脚本新手,所以我不确定从哪里
我正在运行 docker compose 命令以在 docker 中运行应用程序。但是,yml 中定义的卷是空的。如果我挂载一个文件,它就可以工作。但是,当我从 Windows 挂载目录时,我可以看到
我有一个双向滚动的无限滚动列表。该列表显示每行 5 个项目的网格,表示一周 7 天中的 5 个工作日。日子是按月剥离的斑马线(甚至月份的颜色略深)。我想将月份标题放在网格左侧的一列中,从该月的第一天或
我在按照 qemu/linaro 教程尝试执行 qemu, https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Vir
我正在尝试挂载 cephfs,密码没问题: mount -t ceph ceph-mon:6789:/docker/mnt/cephfs -o name=admin,secret=admin-pass
我可以将 HDFS 目录(在 Ubuntu 中配置)挂载到 Windows 服务器的驱动器吗? 映射后,例如 H:\--->\home\user1\HDFSCreatedDir ,想使用普通的 Jav
我有一个由 500 个 linux 机器组成的集群,现在需要使用带有绑定(bind)选项的挂载资源(参见 man 8 mount)来支持 chroot jail 。安装点需要在引导后强制执行和维护。我
我在一些代码片段和 Requests documentation 中看到过类似的事情。 : import requests sess = requests.Session() adapter = re
嗨,我正在编写一个安装cgroup的应用程序,如下所示 mount("cgroup", "/sys/fs/cgroup", "tmpfs",0,NULL); 我可以执行此操作,但是我想添加一个检查以了
我希望使用 Powershell 获取 VHD 安装的驱动器号。我可以使用以下 cmdlet 挂载 VHD: Mount-VHD -Path d:/tmp.vhdx 安装工作正常,但是当我尝试获取驱动
我正在编写一个脚本来创建坐骑。我使用的系统命令是: sudo /bin/mount -soft -t smbfs -o username='{username}',password='{passwor
我正在尝试在多个用户之间共享 NFS 安装。我无法让它工作,因为我总是被拒绝访问。我可以挂载共享,但看不到文件。 导出是通过Heartbeat+Pacemaker进行的。我认为这没有什么区别,但这是导
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 已关闭 9 年前。 此问题似乎与 a specific programming problem, a sof
我最近全新安装了elementary OS,与Windows 8.1双启动。安装完成后,我编辑了eOS的fstab文件,使其自动在/mnt/Windows地址挂载一个ntfs分区。后来我关闭了笔记本电
我正在尝试在装有 Android 2.1 的模拟器上分析 Android 恶意软件。我想在执行可疑应用程序后分析文件权限和指纹。我知道,我可以使用 adb shell 来获取此信息,但我认为在执行例如
在使用 Webpack 和 Vue 编译项目后,当我打开一个使用 Vue 组件的页面时,我得到: [Vue warn]: Failed to mount component: template or
我正在使用 Linux Inotify 来检测程序上的 FS 事件。 当设备挂载到监控目录时如何通知我? 最佳答案 我不认为你可以用 inotify 来做到这一点。这是方法: 阅读uevents fr
有几篇文章对理解 Docker 的卷和数据管理非常有帮助。这两个尤其出色: http://container-solutions.com/understanding-volumes-docker/ h
我正在使用 mount -o bind /some/directory/here /foo/bar 我想用 bash 脚本检查 /foo/bar,看看它是否已经挂载?如果不是,则调用上面的 mount
我是一名优秀的程序员,十分优秀!