Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 反应路由器传递数据_Javascript_Reactjs_React Router_Frontend_React Router Dom - Fatal编程技术网

Javascript 反应路由器传递数据

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

我正在为我的项目使用React。我也在使用react路由器dom库。但是,我对通过dom传递数据感到困惑

以下是父组件的代码:

类父级扩展组件{
建造师(道具){
超级(道具);
此.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中选择的prop
language
不会更新。它只有在我不刷新页面的情况下才有效


我该如何解决这个问题。谢谢

这段代码让我有点困惑,但是,请记住,当你刷新页面时,所有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;