反应本机导航到其他屏幕

React native navigate to other screen

我正在尝试重定向到 CallScreen,但没有调用 redirect() 函数。我的代码在https://pastebin.com/FKLfGxhR,函数应该被调用

  options={{
  'Choose From Library': () => {
    this.redirect();
  },
}} 

这里。

函数在class,并且是

  redirect = () => {
this.props.navigation.navigate('CallScreen')
console.log('test')

}

在调用 this.

之前,

renderActions 应该位于 Component

class ChatScreen extends React.Component {
  
  //..your stuff

  const renderActions = (props) => {
    return <Actions
      ...props
      options={{
        'Choose From Library': () => {
          //It is safe to call this.XXX from here
          this.redirect();
        },
      }}
    />
  };

  render() {
    return <SafeAreaView style={{flex: 1}}>
        <GiftedChat
              messages={this.state.messages}
              onSend={FirebaseStorage.shared.send}
              user={this.user}
              alwaysShowSend
              showUserAvatar
              isAnimated
              showAvatarForEveryMessage
              renderBubble={this.renderBubble}
              renderMessageImage={() => this.showImage}
              renderUsernameOnMessage
              isTyping
              renderActions={renderActions}
        />
    </SafeAreaView>
  }
  redirect = () => {
    this.props.navigation.navigate('CallScreen')
    console.log('test')
  }
}

renderActions应该是class的一个方法。使其成为一种方法,您还必须使用 this.renderActions 而不是 renderActions

class ChatScreen extends React.Component {
  renderActions = (props) => {
    return <Actions
      {...props}
      containerStyle={{
        width: 44,
        height: 44,
        alignItems: 'center',
        justifyContent: 'center',
        marginLeft: 4,
        marginRight: 4,
        marginBottom: 0,
      }}
      icon={() => (
        <Image
          style={{ width: 32, height: 32 }}
          source={{
            uri: 'https://placeimg.com/32/32/any',
          }}
        />
      )}
      options={{
        'Choose From Library': () => {
          this.redirect();
        },
      }}
      optionTintColor="#222B45"
    />
  };
    
  redirect = () => {
    this.props.navigation.navigate('CallScreen')
    console.log('test')
  }
  
  state = {
    messages: [],
  };

  get user() {
    const { name, id, avatar } = this.props.route.params;
    return {
      name: name,
      _id: id,
      avatar: avatar,
    };
  }

    componentDidMount() {
      FirebaseStorage.shared.on(message =>
        this.setState(previousState => ({
          messages: GiftedChat.append(previousState.messages, message),
        }))
      );
  }
  
  componentWillUnmount() {
      FirebaseStorage.shared.off();
  }

  render() {
    return <SafeAreaView style={{flex: 1}}>
        <GiftedChat
              messages={this.state.messages}
              onSend={FirebaseStorage.shared.send}
              user={this.user}
              alwaysShowSend
              showUserAvatar
              isAnimated
              showAvatarForEveryMessage
              renderBubble={this.renderBubble}
              renderMessageImage={() => this.showImage}
              renderUsernameOnMessage
              isTyping
              renderActions={this.renderActions}
        />
    </SafeAreaView>
  }
}