Search code examples
javascriptreact-nativeclassreact-native-gifted-chat

React native navigate to other screen


I am trying to redirect to CallScreen, but the redirect() function isnt being called. My code is in https://pastebin.com/FKLfGxhR, the function is supposed to be called

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

here.

The function is in the class, and is

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

}


Solution

  • renderActions should be a method of the class. Making it a method you also have to use this.renderActions instead of 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>
      }
    }