gpt4 book ai didi

reactjs - 在React中将API数据从父容器传递到子组件

转载 作者:行者123 更新时间:2023-12-03 14:18:48 26 4
gpt4 key购买 nike

我有一个包含许多子组件的 React 容器。其中之一应该是一个模式,它将向用户显示他们的名字,该名字是从父容器中的用户数据 api 中获取的。我应该能够使用 prop 将用户数据传递给子级,但必须缺少某些内容,因为显示名称不会作为值显示在输入中。

父容器

class ParentContainer extends React.Component {
constructor (props) {
super(props)
this.state = {
displayName: this.state.user.displayName
}
this.config = this.props.config
}

async componentDidMount () {
try {
const userData = await superagent.get(`/api/user`)
await this.setState({ user: userData.body })
console.log(userData.body.displayName) <===logs out user display name
} catch (err) {
console.log(`Cannot GET user.`, err)
}
}

render () {
return (
<div className='reviews-container'>
<ReviewForm
config={this.config} />

<ReviewList
reviews={reviews}
ratingIcon={this.ratingIcon}
/>
<DisplayNameModal
config={this.config}
displayName={this.displayName} />
</div>
)
}
}

export default ParentContainer

子组件

 class DisplayNameModal extends React.Component {
constructor (props){
super(props)
this.state = {
displayName: this.props.displayName
}
}

render (props) {
const {contentStrings} = this.props.config

return (
<div className='display-name-container' style={{ backgroundImage: `url(${this.props.bgImgUrl})` }}>
<h2 className='heading'>{contentStrings.displayNameModal.heading}</h2>
<p>{contentStrings.displayNameModal.subHeading}</p>
<input type="text" placeholder={this.props.displayName}/>
<button
onClick={this.submitName}
className='btn btn--primary btn--md'>
<span>{contentStrings.displayNameModal.button}</span>
</button>
<p>{contentStrings.displayNameModal.cancel}</p>
</div>
)
}
}

export default DisplayNameModal

最佳答案

我发现将 displayName: userData.body.displayName 添加到 setState 中,然后使用

将组件包装在父级中
{this.state.displayName &&
<div>
<DisplayNameModal
config={this.config}
displayName={this.state.displayName} />
</div>
}

作为解决方案。

关于reactjs - 在React中将API数据从父容器传递到子组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50280021/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com