React Navigation添加保存按钮

时间:2018-09-17 03:35:33

标签: reactjs react-native redux react-redux react-navigation

我正在使用React Navigation进行路由。当用户打开要修改的库存商品时,我想添加一个保存按钮,该按钮可以从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

1 个答案:

答案 0 :(得分: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);
}