Javascript 反应路由器传递数据
我正在为我的项目使用React。我也在使用react路由器dom库。但是,我对通过dom传递数据感到困惑 以下是父组件的代码:Javascript 反应路由器传递数据,javascript,reactjs,react-router,frontend,react-router-dom,Javascript,Reactjs,React Router,Frontend,React Router Dom,我正在为我的项目使用React。我也在使用react路由器dom库。但是,我对通过dom传递数据感到困惑 以下是父组件的代码: 类父级扩展组件{ 建造师(道具){ 超级(道具); 此.state={ 路径:{ 路径名:“/child/id/1”, 声明:{ 语言选择:“英语” } } }; this.onChangeLanguage=this.onChangeLanguage.bind(this); } onChangeLanguage(){ const{Path}=this.state Pat
类父级扩展组件{
建造师(道具){
超级(道具);
此.state={
路径:{
路径名:“/child/id/1”,
声明:{
语言选择:“英语”
}
}
};
this.onChangeLanguage=this.onChangeLanguage.bind(this);
}
onChangeLanguage(){
const{Path}=this.state
Path.state.languageSelected='西班牙语'
this.setState({Path})
}
render(){
返回(
托儿所
(
)}
/>
);
}
}
它有一个名为Path的状态。父组件将函数onChangeLanguage传递给其子组件
下面是子组件:
类子级扩展组件{
onChange=()=>{
this.props.onChangeLanguage;
};
render(){
const{languageSelected}=this.props.location.state;
返回(
{LanguageSelected===“英语”?“英语”:“西班牙语”}
换语言
);
}
}
如果我单击子组件中的Change Lanuguage
按钮,该函数将被调用,父组件中的状态将更改。选择的prop语言也会在子组件中更新
但是,如果我刷新页面,如果我按下按钮,则Child中选择的proplanguage
不会更新。它只有在我不刷新页面的情况下才有效
我该如何解决这个问题。谢谢 这段代码让我有点困惑,但是,请记住,当你刷新页面时,所有javascript都会被重新加载,因此你在父母中将语言选择
硬编码为英语
,因此每次刷新页面时,它都会重置为英语
。您可以将该值存储在localStorage中,并在刷新时检查其是否存在,或者将其添加到路由路径child/id/:id/:language
然后,如果您使用的是React Router v4,则在子组件中使用this.props.match.params.language
,它将呈现给定的语言。出现此问题的原因就在这里
const { languageChosen } = this.props.location.state
LanguageChoosed是根据这个设置的。props.location,location是在url更改为“/child/id/:id”时设置的,刷新页面后,父元素中的状态会更改,但不会更改location.state。而且,我认为您可以使用组件中的props来解决这个问题。
1.在路由中设置LanguageSelected属性
component={props => (
<Child {...props} onChangeLanguage={this.onChangeLanguage} languageChosen={this.state.Path.state.languageChosen}/>
)}
我猜这是你的路由器出了问题。你在使用browserRouter吗?我不知道你刷新页面的目的是什么。@Root是的,我在使用browserRouter。有时,客户端可能会刷新页面,如果它不工作,这是一个错误。我现在知道了。我已经作出了回答。希望它能帮助你!
const { languageChosen } = this.props.languageChosen;