代码之家  ›  专栏  ›  技术社区  ›  RomaValcer

隐式传递路由器历史记录

  •  0
  • RomaValcer  · 技术社区  · 7 年前

    我正在使用 react-router 具有类似于移动堆栈导航的导航。页面内容应该包装在NavigationScreen对象中(该对象控制侧栏、导航栏和作品):

    class HomeScreen extends React.Component {
      render() {
        return (
           <NavigationScreen>
             <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
               <Text>Home Screen</Text>
               <Link to='/details'>details</Link>
            </View>
           </NavigationScreen>
        );
      }
    }
    

    路线如下:

    export default class App extends React.Component {
      render() {
        return (
          <BrowserRouter>
            <View style={{ position: 'absolute', top: 0, bottom: 0, left: 0, right: 0 }}>
              <Route exact path='/' component={HomeScreen} />
              <Route path='/details' component={DetailsScreen} />
            </View>
          </BrowserRouter>
        );
      }
    }
    

    但我认为我在计划中犯了一个错误。我希望导航栏有一个“后退按钮”,可以通过调用 this.props.history.goBack 。问题是 HomeScreen 类接收此道具,而不是 NavigationScreen 。我能看到的唯一解决办法是做一个相当笨拙的道具传球:

    class HomeScreen extends React.Component {
      render() {
        return (
           <NavigationScreen history=this.props.history>
             <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
               <Text>Home Screen</Text>
               <Link to='/details'>details</Link>
            </View>
           </NavigationScreen>
        );
      }
    }
    

    在我看来很糟糕,有没有更好的办法?

    1 回复  |  直到 7 年前
        1
  •  3
  •   Tomasz Mularczyk    7 年前

    您可能想使用 withRouter 临时开启 NavigationScreen 如果你不想通过 history 作为道具。