React-router 传递数据
我在我的项目中使用 React。我也在使用 react-router-dom 库。但是,我对通过 react-router-dom 传递数据感到困惑。
这是父组件的代码:
class Parent extends Component {
constructor(props) {
super(props);
this.state = {
Path: {
pathname: "/child/id/1",
state: {
languageChosen: "English"
}
}
};
this.onChangeLanguage = this.onChangeLanguage.bind(this);
}
onChangeLanguage() {
const { Path } = this.state
Path.state.languageChosen = 'Spanish'
this.setState({Path})
}
render() {
return (
<div>
<NavLink to={this.state.Path}>ToChild</NavLink>
<Route
path={`/child/id/:id`}
render={props => (
<Child {...props} onChangeLanguage={this.onChangeLanguage} />
)}
/>
</div>
);
}
}
它有一个名为 Path 的状态。父组件将函数 onChangeLanguage 传递给其子组件。
这是子组件:
class Child extends Component {
onChange = () => {
this.props.onChangeLanguage;
};
render() {
const { languageChosen } = this.props.location.state;
return (
<div>
{languageChosen === "English" ? "English" : "Spanish"}
<button onClick={this.onChange}>Change Language</button>
</div>
);
}
}
如果我单击子组件中的
Change Lanuguage
按钮,则会调用该函数并且父组件中的状态会发生变化。prop
LanguageChosen
也会在子组件中更新。
但是,如果我刷新页面,按下按钮后子组件中的 prop
LanguageChosen
不会更新。只有当我不刷新页面时它才有效。
我该如何解决这个问题?谢谢!
出现此问题的原因在这里
883630842
languagechose是从this.props.location设置的,当URL更改为“/child/id/id/ :id“,在刷新页面后,在父元素中陈述,但它不会更改位置。STATE.STATE.STATE。,我认为您可以使用组件中的道具来解决问题。 1.在Route
733356396
2中设置LanguageChosen属性。在儿童组件
497456266
中更改此操作。
这段代码让我有点困惑,但请记住,当您刷新页面时,所有 javascript 都会重新加载,因此您在 Parent 中将
languageChosen
硬编码为
English
,因此每次刷新页面时,它都会重置为
English
。您可以将值存储在 localStorage 中并在刷新时检查其是否存在,也可以将其添加到您的路由路径
child/id/:id/:language
然后,如果您使用的是 React Router v4,请在您的子组件中使用
this.props.match.params.language
,它将呈现给定的语言。