【发布时间】:2020-09-02 20:15:33
【问题描述】:
我现在正在创建一个简单的 React 组件。基本上,用户可以输入一个 ID,当他们提交时,它会显示容器中的一些信息。代码是这样的
export default class IDContainer extends React.Component {
constructor(props) {
super(props);
this.state = {
Id: '',
isSubmitted: false
};
}
handleSubmit = (event) => {
this.setState({
isSubmitted: true
});
};
handleChange = (event) => {
this.setState({
Id: event.target.value
});
};
render() {
return (
<form onSubmit={this.handleSubmit}>
<div
style={{
display: 'flex',
justifyContent: 'center',
alignItems: 'center'
}}
>
<Input type={'text'} placeholder={"Enter Id"} value={this.state.Id} onChange={this.handleChange} />
<Button type={'submit'} > Lookup </Button>
</div>
<div>
{this.state.isSubmitted && <DetailsContainer Id={this.state.Id} />}
</div>
</form>
);
}
}
details 容器已经创建好了,只是返回了一些关于已经传入的 Id 的详细信息。我可以很好地显示我传入的第一个 Id 的详细信息。但是,当我输入另一个 ID 并提交表单时,DetailsContainer 不会重新呈现,并且仍在显示旧 ID 的详细信息。我尝试移动它并添加一些逻辑(我什至将 DetailsContainer 置于我的状态以查看是否可以那样操作它),但这似乎不起作用。我看到有一个shouldComponentUpdate() 方法,这似乎是我需要使用的,但我看到的指南都将它放在DetailsContainer 中。无论如何让我将它放在 IDContainer 中,还是有更简单的方法来重新渲染 DetailsContainer?
【问题讨论】:
-
你的代码中有这个:
<DetailsContainer Id={this.state.promotionId} />}-this.state.promotionId定义了吗? -
Id和promotionId之间似乎有些混淆——它们应该是同一个东西吗?您的输入更新了与传递给子 (DetailsContainer) 组件的不同的输入... -
是的,我的错,我做了上面的编辑。他们应该是同一件事。复制代码时出错。
-
不是答案,但您可以使用以下语法替换整个
constructor函数:state = { Id: '', isSubmitted: false } -
我认为这与您的 isSubmitted 状态在第一次变为真后没有改变有关。所以第一次提交时,它变为 true 并重新渲染,但第二次,它已经为 true。
标签: javascript reactjs react-component