【问题标题】:React Navigation V5, TabNavigation sharing propsReact Navigation V5、TabNavigation 分享道具
【发布时间】:2020-04-10 23:27:50
【问题描述】:

5 月使用createMaterialTopTabNavigator 创建的仪表板屏幕,有 5 个屏幕。 我想实现这一点,例如在 screen1 中执行某些功能之后,然后我希望 screen2 执行特定功能,而无需再次渲染任何屏幕。 所以我的问题是如何使选项卡连接并相互了解。 我希望在屏幕或道具之间共享状态。 这是我的仪表板代码(摘要)。

function Switch0({navigation, route}) {return <Screen0 navigation = {navigation} route={route}/>}
function Switch1({navigation, route}) {return <Screen1 navigation = {navigation} route={route}/>}
function Switch2({navigation, route}) {return <Screen2 navigation = {navigation} route={route}/>}
function Switch3({navigation, route}) {return <Screen3 navigation = {navigation} route={route}/>}
function Switch4({navigation, route}) {return <Screen4 navigation = {navigation} route={route}/>}

export default class DashBoard1 extends React.Component {

  render(){
  return (
    <Tab.Navigator>
      <Tab.Screen name="MyTeams" component={Switch0} options={navigationOptions0} />
      <Tab.Screen name="Matches" component={Switch1} options={navigationOptions1}/>
      <Tab.Screen name="PlayerMarket" component={Switch2} options={navigationOptions2}/>
      <Tab.Screen name="Courts" component={Switch3} options={navigationOptions3}/>
      <Tab.Screen name="Tournaments" component={Switch4} options={navigationOptions4}/>
    </Tab.Navigator> 
  );
}

【问题讨论】:

  • 你需要一个应用状态提供者在所有屏幕之上。
  • 我尝试在 DashBoard 类中创建一个状态并将其发送到 5 个屏幕,我还创建了一个函数来更改 DashBoard 的状态并将其传递到 5 个屏幕并且它起作用了。但是,当 DashBoard 状态更改时,屏幕会重新渲染。

标签: react-native react-navigation expo react-navigation-v5


【解决方案1】:

我的意思是你应该用一些状态提供者包裹你 AppContainer

import { StoreProvider } from 'store';

<StoreProvider>
  <AppContainer />
</StoreProvider>

可以使用redux 创建此商店提供程序。 https://redux.js.org 或者,如果您对钩子感到满意,您可以尝试React context Api,并编写您的操作和减速器。 https://reactjs.org/docs/context.html

import Reducer, { initialState } from './reducers';
import useActions from './actions';

export const Store = React.createContext();

export const StoreProvider = props => {
  const { children } = props;

  const [state, dispatch] = React.useReducer(Reducer, initialState);
  const actions = useActions(state, dispatch);
  const value = { state, dispatch, actions };

  return <Store.Provider value={value}>{children}</Store.Provider>;
};

【讨论】:

  • 好的,谢谢。我会看看他们,我认为这可能是唯一的解决方案。
  • 是的,我现在正在实施 redux。
  • 非常感谢,我实现了它,它工作正常。
猜你喜欢
  • 2020-06-27
  • 1970-01-01
  • 2018-04-02
  • 1970-01-01
  • 2020-08-08
  • 2020-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多