Вызов действия редукса с использованием реквизита из опций stack-navigator-options - PullRequest
0 голосов
/ 25 апреля 2018

Я хочу вызвать действие из избыточности в опциях стекового навигатора. Это мой код Когда я использую действие, используя this.props.action_name, оно говорит, что это не функция. Что я здесь не так делаю? Я использовал для этого файл navigation.params, но он все равно не работает.

componentDidMount() {
    this.props.navigation.setParams({
      referencedSharePost: this.sharePost,
      referencedDoShare: this.props.doShare
    });
  }

  sharePost = () => {
    this.props.doShare();
    console.log("DONE");
  };

  render() {
    return (
      <View style={styles.container}>
        <ScrollView>
          <WritePost profile={this.state.loggedUserProfile} />

          <View style={styles.sharePostWrapper}>
            <PostProfileBar profile={this.state.postedUserProfile} />

            <Image
              source={{
                uri: "https://pbs.twimg.com/media/DWvRLbBVoAA4CCM.jpg"
              }}
              resizeMode={"stretch"}
              style={styles.image}
            />
          </View>
        </ScrollView>
      </View>
    );
  }

  static navigationOptions = ({ navigation }) => {
    const { params = {} } = navigation.state;

    return {
      headerTitle: "Share To Feed",
      headerTitleStyle: {
        paddingLeft: "20%",
        paddingRight: "20%"
      },
      headerStyle: {
        paddingRight: 10,
        paddingLeft: 10
      },
      headerLeft: (
        <Icon
          name={"close"}
          size={30}
          onPress={() => {
            navigation.goBack();
          }}
        />
      ),
      headerRight: (
        <ButtonWithoutBackground
          buttonText={styles.buttonText}
          onPress={() => params.referencedSharePost()}
        >
          Post
        </ButtonWithoutBackground>
      )
    };
  };

Вот как я сопоставляю свое состояние с реквизитом.

import { connect } from "react-redux";
import { bindActionCreators } from "redux";

import SharePostScreen from "./SharePostScreen";
import { doShare } from "../../config/actions";

const mapStateToProps = state => {
  return {
    sharedPost: state.mainFeed.updatedPost
  };
};

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

export default connect(mapStateToProps, mapDispatchToProps)(SharePostScreen);

Я хочу использовать this.props.doShare внутри onPress () в stackNavigationOptions.

1 Ответ

0 голосов
/ 25 апреля 2018

Вам не нужно отдельно connect SharePostScreen после его экспорта по умолчанию, поскольку у него нет экземпляра в состояниях редукса, во время выполнения компонента.

Поэтому вы можете переместить свой код во второй фрагмент, к SharePostScreen и использовать его там, чтобы получить доступ к props.

const mapStateToProps = state => {
  return {
    sharedPost: state.mainFeed.updatedPost
  };
};

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

export default connect(mapStateToProps, mapDispatchToProps)(SharePostScreen);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...