我正在构建一个反应应用程序,我遇到了以下问题:
我有一个博客。该博客是使用这样的类组件实现的:
class Blog extends Component {
constructor() {
super();
this.state = {
blogPosts: [],
newPost: {
title: null,
body: null
},
editPostId: null,
accessToken: null,
file: null,
currentPagePosts: [],
pageSize: 5
};
this.changeHandler = this.changeHandler.bind(this);
this.submitHandler = this.submitHandler.bind(this);
this.clearForm = this.clearForm.bind(this);
this.readMoreClicked.bind(this);
this.postTitleRef = React.createRef();
this.postBodyRef = React.createRef();
this.selectedFileRef = React.createRef();
}
...
readMoreClicked(postId) {
const post = this.state.blogPosts.find(p => p.id === postId);
post.collapsed = false;
this.setState({blogPosts: this.state.blogPosts});
}
createTable() {
return this.state.blogPosts.length
? <Table
posts={this.state.currentPagePosts}
isLoggedIn={!!this.state.accessToken}
editPost={this.editPost}
readMoreClicked={this.readMoreClicked} />
: null;
}
...
}
该组件基本上维护了一个博客文章表,如下所示:
问题是阅读更多...链接。在上面的代码片段中,我将 read more 链接的处理程序传递到 createTable() 中的博客表。Table 组件是一个功能组件。它看起来像这样:
function Table(props) {
...
return (
...
<div className="read-more-link-container">
<span className="read-more-link" onClick={() => props.readMoreClicked(id)}>
Read more...
</span>
</div>
...
)
}
当有人点击阅读更多链接时,它会调用博客组件中的 readMoreClicked() 方法(也在上面的代码片段中)。但在 readMoreClicked() 方法中,它告诉我状态未定义:
这让我想知道博客组件的状态是否不一定会因为您从功能组件调用其中的方法而进入范围。<--这是问题吗?还是有其他事情发生?
谢谢。