javascript - React JS this.props.state 不是函数?
问题描述
不明白我在这里的陈述有什么问题,我一直在谷歌上查找错误消息,但我真的不明白这个问题。
componentDidMount()
{
fetch('http://192.168.1.33:8080/getprojects/')
.then(response => response.json())
.then(data => {
this.props.state({
projects: data.name
});
});
}
根据 chrome 的控制台,它说
Uncaught (in promise) TypeError: _this2.props.state is not a function
并指出这一点:
this.props.state({
projects: data.name
});
我在这里迷路了。React JS 的新手试图创建一个不断获取数据的网站(这里我试图通过在我的 Node Express 服务器上获取名称来填充格式为 ul li 的列表)
编辑
这是 Render 函数中 Return 之前的完整代码:
class ProjectList extends Component {
constructor (props) {
super (props);
this.state = {
projects: [],
};
}
componentDidMount()
{
fetch('http://192.168.1.33:8080/getprojects/')
.then(response => response.json())
.then(data => {
this.setState({projects: data.name})
});
}
render () {
let projects = this.state.projects;
let liItems = projects.map((project) =>
<li key={project.name}>{project.name}</li>
);
之后它只是基本的 HTML
解决方案
您正在获取未定义的属性,因为渲染函数在 componentDidMount 函数之前运行。所以当它第一次尝试运行时,它遇到的第一件事就是:let projects = this.state.projects;
你最初定义它,它是一个空数组。因此,在您的渲染函数中,删除上面的行并替换为:
if (this.state.projects.length === 0){
return <div>Loading</div>
}
因此,当您的组件最初运行时,它将在瞬间渲染 Loading div,并且当您的数组被填充时,您的组件将被渲染为您的数组。
推荐阅读
- firebase - 存储标签以获得良好查询选项的方式?
- server-side - 通过 PHP 或 Javascript 构建 HTML 页面?服务器端与客户端
- java - 有没有一种方法可以像使用 ListView 或 RecyclerView 一样使用 firebaseUI 填充微调器项目?
- java - Android:单击后退按钮时如何退出活动而不关闭它?
- laravel - laravel 在登录后保留访客的会话
- ios - Autorelease pool的真正使用
- mysql - MySql 中的 STRING_SPLIT - 怎么做?
- php - WordPress 联系表格 7 文本值更改
- wpf - 具有依赖关系的子 ViewModel 的 WPF/MVVM 导航
- java - 带有函数参数的方法重载返回不明确的方法调用错误