React Navigation添加保存按钮

问题描述 投票:1回答:1

我正在使用React Navigation进行路由。当用户打开要修改的Stock Item时,我想添加一个Save按钮,该按钮从redux state获取所有修改过的变量并查询它们到API端点

目前我只能在非常静态的意义上添加保存按钮,如下所示:

const Stack = createStackNavigator(
    {
        Home: {
            screen: Tabs,
            navigationOptions: {
                header: null,
            },
        },
        StockScreen: {
            screen: StockScreen,
            navigationOptions: {
                headerRight: (

                    <Button
                      onPress={() => {
                          alert('This is a button!');
                      }}
                      title="Save"
                      color="#fff"
                    />
                  ),
            },
        },
    },
    {
    }
);

我有我的标签导航器:

let StockTabs = createMaterialTopTabNavigator(
    {
        General: {
            screen: GeneralStockTab,
        },
        Pricing:{
            screen: PricingTab,
        },
        Stock:{
            screen: StockTab
        },
        Other:{
            screen: OtherTab,
        },
    },
    {
    }
);

现在这个选项卡导航连接到redux,如下所示:

const mapStateToProps = state => ({
    item: state.stockItem.item,
    itemLoading: state.stockItem.loading,
    itemError: state.stockItem.error,
  });

const mapDispatchToProps = (dispatch) => {
    return ({
        fetchStockItem: bindActionCreators(fetchStockItem, dispatch)
    })
}

  const mergeProps = (state, dispatch, ownProps) => {
    return ({
        ...ownProps,
        screenProps: {
          ...ownProps.screenProps,
          ...state,
          ...dispatch,
        }
    })
  }

export default connect(mapStateToProps, mapDispatchToProps, mergeProps)(StockTabs);

我希望能够有一个动态布尔值来允许按下或不按下保存按钮,具体取决于是否修改了值,并且当按下保存时我想运行一个redux函数来更新state和查询api。

以下是选项卡导航中的应用程序的外观:enter image description here

reactjs react-native redux react-redux react-navigation
1个回答
1
投票

如果您已经在使用redux,那么您可以创建一个连接的<Button/>组件。布尔值可以通过将它添加到reducer并将其链接到mapStateToProps然后链接到组件以类似的方式传递。

const Button = ({testDispatch}) => {
  return (
    <Button
      onPress={testDispatch}
      title="Save"
      color="#fff"
    />
  )

function mapDispatchToProps(dispatch) {
  return {
    testDispatch: () => dispatch(testDispatch())
  };
}

const ConnectedButton = connect(
   null,
   mapDispatchToProps,
 )(Button);
}
© www.soinside.com 2019 - 2024. All rights reserved.