代码之家  ›  专栏  ›  技术社区  ›  Khurshid Ansari

react native-如何根据应用程序语言更改抽屉位置?

  •  0
  • Khurshid Ansari  · 技术社区  · 6 年前

    我正在使用react native和react导航进行路由。我有英语和阿拉伯语的申请。当用户将英语转换为阿拉伯语时,我正在重新加载应用程序,一切正常,只是抽屉位置没有改变。

    我的代码是这样的:

    export default App extends Component {
    componentDidMount(){
    AsyncStorage.getItem("lang").then(language => {
    if(language == "ar"){
       I18nManager.allowRTL(true);
    }
    })
    }
    
    render(){
       return (
          <AppContainer> </AppContainer>
       )
    }
    }
    
    const AppNavigator = createDrawerNavigator(
      {
        Home: HomeScreen,
        Profile: ProfileScreen,
      },
      {
        initialRouteName: "Home",
        contentComponent: SideMenuScreen,
        drawerPosition: "left"
      }
    );
    const AppContainer = createAppContainer(AppNavigator);
    

    如果语言为阿拉伯语,如何将抽屉位置更改为右侧?

    0 回复  |  直到 6 年前
        1
  •  2
  •   fayeed    6 年前

    您可以尝试以下方法:

    const AppContainer = ({ position }) => {
      const AppSide = createAppContainer(
        createDrawerNavigator(
          {
            Home: HomeScreen,
            Profile: SettingsScreen
          },
          {
            initialRouteName: "Home",
            // contentComponent: SideMenuScreen
            drawerPosition: position
          }
        )
      );
    
      return <AppSide />;
    };
    
    export default class App extends Component {
      state = {
        position: "left"
      };
    
      componentDidMount() {
        AsyncStorage.getItem("lang").then(language => {
          if (language == "ar") {
            I18nManager.allowRTL(true);
            this.setState({
              position: "right"
            });
          } else {
            this.setState({
              position: "left"
            });
          }
        });
      }
    
      render() {
        return <AppContainer position={this.state.position}> </AppContainer>;
      }
    }
    
        2
  •  0
  •   Arjun Ramdas    6 年前

    试试这个

    var position_navbar;
    
    export default App extends Component {
    
    
        async componentWillMount(){
    
        var language = await AsyncStorage.getItem("lang");
    
          if(language == "ar"){
             I18nManager.allowRTL(true);
             this.setState({position:'leftside'})
    
          }
         }
        }
    
        render(){
         position_navbar = this.state.position == 'leftside'?'left':'right'
    
           return (
              <AppContainer> </AppContainer>
           )
        }
        }
    
        const AppNavigator = createDrawerNavigator(
          {
            Home: HomeScreen,
            Profile: ProfileScreen,
          },
          {
            initialRouteName: "Home",
            contentComponent: SideMenuScreen,
            drawerPosition: position_navbar 
          }
        );
        const AppContainer = createAppContainer(AppNavigator);