reactjs - 反应:承诺完成后触发渲染
问题描述
请注意,我从 AWS DynamoDB 获取数据。
...
class Test extends Component {
constructor(props) {
super(props);
this.state = {
contactList: []
}
}
componentDidMount() {
var getItemsPromise = db.scan({ TableName: "tester" }).promise();
getItemsPromise.then((data) => this.setState({ contactList: data.Items }));
}
render() {
return (
<div>{this.state.contactList[0].link.S}</div>
);
}
}
export default Test;
我正在尝试呈现返回的值,但不能。如果我设置
render() {
console.log(this.state.contactList[0].link.S);
return (
<div>test</div>
);
}
有用。这是为什么?为什么当我将它直接设置为内联时它不起作用?
解决方案
this.state.contactList[0]
是undefined
在promise被解决之前,所以this.state.contactList[0].link
会产生错误。
例如,您可以null
从 render 方法返回,直到数组被您的对象填充:
class Test extends Component {
// ...
render() {
if (this.state.contactList.length === 0) {
return null;
}
return <div>{this.state.contactList[0].link.S}</div>;
}
}
推荐阅读
- c++ - Travis CI 报告 Vulkan 项目的 gcc-7 的链接器错误
- android - 无法在 Android 应用程序中看到应用程序名称
- sql - 需要找到我表中每个人的最大 term_code 值
- graphql - 等效于 GraphQL 查询的数组映射
- javascript - JS 符号安全——可以创建非唯一符号吗?
- c++ - 为什么我的 C++WinRT 包含不起作用?
- php - Symfony 5 无法将 EntityManagerInterface 注入验证器
- prestashop - Prestashop / Smarty - 在主题中扩展一个模块模板文件
- solr - 数据不会在 Solr 8.4 CDCR 中复制
- sql - 在 Oracle 中使用 SQL+ 显示表的主键?