无法读取未定义的 属性 'props' (React)
Cannot read property 'props' of undefined (React)
我有一个有条件地呈现内容的反应组件,但它有点冗长和重复。我试图将重复的代码包装在一个函数中,然后我稍后调用它(输出取决于我给函数的任何参数)但这不起作用。
原始(详细)解决方案:
render() {
const userId = parseInt(this.props.params.userId)
const {posts} = this.props
if(userId) {
const postsForUser = posts.filter( post => post.userId === userId )
return (
<div>
{postsForUser.map( post =>
<Post {...this.props} post={post} key={post.id} />
)}
</div>
)
}
else {
return (
<div>
{this.props.posts.map( post =>
<Post {...this.props} post={post} key={post.id} />
)}
</div>
)
}
} // end render()
(不成功)尝试trim它下来
render() {
const userId = parseInt(this.props.params.userId)
function renderPostList(postsInput) {
return (
<div>
{postsInput.map( post =>
<Post {...this.props} post={post} key={post.id} />
)}
</div>
)
}
if (userId) {
const postsForUser = this.props.posts.filter( post => post.userId === userId )
return renderPostList(postsForUser)
}
else {
return renderPostList(this.props.posts)
}
}
我收到错误:Cannot read property 'props' of undefined
我知道问题与函数的作用域有关,以及 this
是如何引用错误的 this(或在本例中什么都没有),但我很难弄清楚如何解决这个问题。如果有人能解释一下在这种情况下具体出了什么问题,我将不胜感激。
您应该将函数 renderPostList
绑定到 this
以使用 props
值。尝试以下解决方案:
var renderPostList = function(postsInput) {
return (
<div>
{postsInput.map( post =>
<Post {...this.props} post={post} key={post.id} />
)}
</div>
)
};
renderPostList.bind(this);
您应该可以通过将 renderPostList
方法从 render
方法中移出并移至 class 级别来完成此操作。
renderPostList = (postsInput) => (
<div>
{postsInput.map( post =>
<Post {...this.props} post={post} key={post.id} />
)}
</div>
)
render() {
const userId = parseInt(this.props.params.userId)
if (userId) {
const postsForUser = this.props.posts.filter( post => post.userId === userId )
return this.renderPostList(postsForUser)
}
else {
return this.renderPostList(this.props.posts)
}
}
我有一个有条件地呈现内容的反应组件,但它有点冗长和重复。我试图将重复的代码包装在一个函数中,然后我稍后调用它(输出取决于我给函数的任何参数)但这不起作用。
原始(详细)解决方案:
render() {
const userId = parseInt(this.props.params.userId)
const {posts} = this.props
if(userId) {
const postsForUser = posts.filter( post => post.userId === userId )
return (
<div>
{postsForUser.map( post =>
<Post {...this.props} post={post} key={post.id} />
)}
</div>
)
}
else {
return (
<div>
{this.props.posts.map( post =>
<Post {...this.props} post={post} key={post.id} />
)}
</div>
)
}
} // end render()
(不成功)尝试trim它下来
render() {
const userId = parseInt(this.props.params.userId)
function renderPostList(postsInput) {
return (
<div>
{postsInput.map( post =>
<Post {...this.props} post={post} key={post.id} />
)}
</div>
)
}
if (userId) {
const postsForUser = this.props.posts.filter( post => post.userId === userId )
return renderPostList(postsForUser)
}
else {
return renderPostList(this.props.posts)
}
}
我收到错误:Cannot read property 'props' of undefined
我知道问题与函数的作用域有关,以及 this
是如何引用错误的 this(或在本例中什么都没有),但我很难弄清楚如何解决这个问题。如果有人能解释一下在这种情况下具体出了什么问题,我将不胜感激。
您应该将函数 renderPostList
绑定到 this
以使用 props
值。尝试以下解决方案:
var renderPostList = function(postsInput) {
return (
<div>
{postsInput.map( post =>
<Post {...this.props} post={post} key={post.id} />
)}
</div>
)
};
renderPostList.bind(this);
您应该可以通过将 renderPostList
方法从 render
方法中移出并移至 class 级别来完成此操作。
renderPostList = (postsInput) => (
<div>
{postsInput.map( post =>
<Post {...this.props} post={post} key={post.id} />
)}
</div>
)
render() {
const userId = parseInt(this.props.params.userId)
if (userId) {
const postsForUser = this.props.posts.filter( post => post.userId === userId )
return this.renderPostList(postsForUser)
}
else {
return this.renderPostList(this.props.posts)
}
}