React native 反应本机导航屏幕

React native 反应本机导航屏幕,react-native,navigation,expo,React Native,Navigation,Expo,我在react native中使用抽屉导航器 我有一个主屏幕(有一个项目列表),另一个屏幕(DetailDataScreen)用于显示选中时每个项目的详细信息 class HomeScreen extends React.Component { render(){ //code } } 在主屏幕中,我有两个选项来选择要显示在FlatList上的数据(英语列表和另一种语言列表)。渲染时,默认数据以英文列表显示 问题是当数据显示在另一种语言列表中时。我点击了一下,它用

我在react native中使用抽屉导航器

我有一个主屏幕(有一个项目列表),另一个屏幕(DetailDataScreen)用于显示选中时每个项目的详细信息

class HomeScreen extends React.Component {
     render(){
     //code
     }
}
在主屏幕中,我有两个选项来选择要显示在FlatList上的数据(英语列表和另一种语言列表)。渲染时,默认数据以英文列表显示

问题是当数据显示在另一种语言列表中时。我点击了一下,它用另一种语言显示了数据(运行良好)。但当我返回时(它再次显示英文数据,这意味着主屏幕再次加载)

那么,我如何解决这个问题呢

class DetailDataScreen extends React.Component {
     render(){
     //code
     }
}

您可能在
主屏幕中使用了
selectedLanguage
状态在语言列表之间切换。卸载
主屏幕时,需要保持此状态

要实现这一点,您可以将该状态移动到在屏幕之间切换时不会卸载的父组件:

const DrawerNav = DrawerNavigator({
  // config
});

class App extends React.Component {
  state = {
    selectedLanguage: null,
  };
  render() {
    return <DrawerNav screenProps={{ selectedLanguage: this.state.selectedLanguage }} />;
  }
}

const HomeScreen = props => (props.screenProps.selectedLanguage === 'EN') ? ...
const-DrawerNav=DrawerNavigator({
//配置
});
类应用程序扩展了React.Component{
状态={
selectedLanguage:null,
};
render(){
返回;
}
}
const HomeScreen=props=>(props.screenProps.selectedLanguage==='EN')。。。
这有点难看,因为
selectedLanguage
将被传递到其他不使用它的屏幕


更优雅的解决方案是将状态存储在Redux中。

您应该为当前类型创建一个
状态

class HomeScreen extends React.Component {
     render(){
     //code
          {
               this.state.currentType === ENGLISH ?
               <English />
               : <Another />
          }
     }
}
类主屏幕扩展React.Component{
render(){
//代码
{
this.state.currentType==英语?
: 
}
}
}

您能再加上一些代码吗?这样我们就可以理解你的问题了。我已经给了你样品。如果您不了解状态,您应该了解更多关于状态和属性的信息。我只是通过创建全局变量文件来修复。并且,在主屏幕中修改=module.exports={selectedLanguage:'enjp'}是否使用Redux?你能为
主屏幕添加当前代码吗?我不使用Redux。现在,我想将状态“selectedLanguage”设置为应用程序级别。但是我不知道我怎么才能得到它?把它作为道具传下去。您正在使用react导航吗?这是我的代码导出默认类应用程序扩展react.Component{constructor(props){super(props)this.state={selectedLanguage:'enjp'}}}render(){return();}}}}AppDrawerNavigator=DrawerNavigator({HomeScreen:{screen:HomeScreen},DetailGlossaryScreen:{screen:DetailGlossary},},{initialRouteName:'HomeScreen',contentComponent:customDrawerContentComponent,})///主屏幕类HomeScreen扩展React.componentDidMount(){let sortArray=[]如果(this.props.selectedLanguage=='enjp'){sortArray=sortBy(entojp,['word'])如果(this.props.selectedLanguage==='jpen'){sortArray=sortBy(jptoen,['word']))