我有两个反应组件Post和Postform。Posts是显示从api获取的帖子列表的组件。Postform组件是一种创建新帖子,然后更新帖子组件的表单。我在Posts中声明了一个函数addPost()为全局函数,并将其绑定在Posts构造函数中。然后,addPost()方法从Posts导出,并导入到Postform组件中,在那里我想使用导入的addPost()方法更新Posts组件的状态
但是,我收到一个错误,指出这在Post组件的addPost()内部无效。从另一个同级更新同级的过程取自此博客文章
我包括这两个组件的代码以供参考。
这是Posts.js即,
import React, { Component } from 'react'
export function addPost(posts){
this.setState({ posts });
}
export default class Posts extends Component {
constructor(props) {
super(props);
this.state = {
posts: []
}
this.getPosts = this.getPosts.bind(this);
addPost = addPost.bind(this);
}
getPosts(posts) {
this.setState({ posts, })
console.log(this.state);
}
componentWillMount() {
fetch('https://jsonplaceholder.typicode.com/posts')
.then(res => res.json())
.then(posts => this.getPosts(posts));
}
render() {
const posts = this.state.posts;
const postList = posts.map(post => {
return (
<div key={post.id}>
<div>ID: {post.id}</div>
<br />
<div>{post.title}</div>
<br />
<div>{post.body}</div>
<hr />
</div>
)
})
return (
<div>
<h1>Posts</h1>
<hr />
{postList}
</div>
)
}
}
这是Postform。js
import React, { Component } from 'react'
import addPost from './Posts.js';
export default class Postform extends Component {
constructor(props) {
super(props);
this.state = {
title: '',
body : '',
}
this.onChange = this.onChange.bind(this);
this.onSubmit = this.onSubmit.bind(this);
}
onChange(event) {
this.setState({
[event.target.name]: event.target.value,
})
}
onSubmit(event) {
const post = {
title: this.state.title,
body : this.state.body
}
//this is going to start a fetch process to post the new post to the database
fetch('https://jsonplaceholder.typicode.com/posts',
{
method: 'POST',
headers: {
'content-type': 'application/json'
},
body: JSON.stringify(post),
})
.then(res => res.json())
.then(data => addPost({data}));
event.preventDefault();
}
render() {
return (
<div>
<h1>ADD POST</h1>
<form onSubmit={this.onSubmit}>
<div>
<label>Title</label>
<input type="text" name="title" value={this.state.title} onChange={this.onChange} />
</div>
<div>
<label>Body</label>
<textarea name="body" onChange={this.onChange} value={this.state.body} />
</div>
<br />
<button type="submit">ADD</button>
</form>
</div>
)
}
}
问题在于这些线路:
export function addPost(posts){
this.setState({ posts });
}
这将不起作用,因为在Post
类之外没有this
的概念。您应该在父组件中有一个函数(Postform
),并以这种方式更新道具。
我有一个产品组件,我希望将其图片传递给另一个组件,我的图片从Rails后端上传,并映射产品详细信息。我想实现的是,当您单击按钮时,您的产品图片将显示在设计页面中进行自定义设计。 设计页面当您单击设计我按钮时,根据产品,该产品的图片应该出现在设计页面中 陈列
问题内容: 这是我制作的屏幕,我在该屏幕上导入了三个文件,这些文件将在单击单选按钮时显示。另外还有一个相关的移动屏幕,例如,我现在导入了,如您看到的BigText,它包含表格,现在我想在BigTextMobile组件中打印其输入值 问题答案: 为了简化解决方案,您可以执行以下操作: 然后,在 BigText 组件中,您可以通过此回调添加一些数据,如下所示: 并将数据从状态传输到您的 BigText
非常感谢任何帮助。 编辑:我不敢相信我居然要明确声明我不想复制粘贴它。
嗨,我有一个对象,它正在使用一个组件中的可观察到的东西从api更新,我想捕获同一对象对另一个组件的更改。这两个组件都是两个选项卡。最初是根据路由更新数据。以下是正在更新的数据: 我在这里捕获数据: 在中,数据最初是从路由获取的。考虑到上述情况,我有两个问题: 如果应用程序有多个组件,我想我必须在每个组件中事件,这将是一个很好的做法。请提出任何替代方法? 由于数据来自服务器,为什么不从中的获取更新的
问题内容: 许多模板语言都有“ slots”或“ yield”语句,它们允许进行某种形式的控制反转,以将一个模板包装在另一个模板中。 Angular具有“ transclude”选项。 Rails有收益声明。如果React.js拥有yield语句,它将看起来像这样: 所需的输出: React,React.js没有。如何定义包装器组件以实现相同的输出? 问题答案: 尝试: 有关更多信息,请参见文档中
许多模板语言都有“slots”或“yield”语句,它们允许进行某种形式的控制反转,将一个模板包装在另一个模板中。 唉,react.js没有。我如何定义包装器组件以实现相同的输出?