Как вызвать функцию класса из заголовка React Navigation Ba - PullRequest
0 голосов
/ 17 ноября 2018

Я пытаюсь вызвать параметризованную функцию в заголовке, но не смог, так как не могу найти способ передачи параметра.

class MyScreen extends React.Component {

static navigationOptions = ({ navigation }) => 
{
    headerLeft: (
        <SearchBar 
         placeholder="Search"
         round
         onChangeText={text => this.searchFunction(text)}
        />
    )
};

*searchFunction(text) 
{
    alert( text + ' searched succesfully');
}*

componentDidMount() 
{
  **//I would need implementation here**
}

render() 
{
    return (<View />);
}

}

1 Ответ

0 голосов
/ 17 ноября 2018

Зарезервированное слово this ничего не значит в контексте static функции navigationOptions, поэтому его нельзя использовать для вызова searchFunction.

Есть способ добавить параметры в объект navigation, чтобы вы могли получить их в статической функции navigationOptions.

Вы можете добавить searchFunction в качестве параметра navigation объекта и передать его атрибуту onChangeText.

Реализация выглядит так:

class MyScreen extends React.Component {

  // Pass the searchFunction from the navigation params to the `onChangeText` attribute.
  // It should be triggered with the `text` argument. 
  static navigationOptions = ({ navigation }) => 
  {
    headerLeft: (
      <SearchBar 
       placeholder="Search"
       round
       onChangeText={navigation.getParam('searchFunc')} 
      />
    )
  };

  // Use arrow function to bind it to the MyScreen class.
  // (I'm not sure you have to do it like this, try to use it as a normal function first)
  searchFunction = (text) => {
    alert( text + ' searched succesfully');
  }

  // Add the `searchFunction` as a navigation param:
  componentDidMount() {
    this.props.navigation.setParams({searchFunc: this.searchFunction})
  }

  // Since we pass a class function as a param
  // I believe it would be a good practice to remove it 
  // from the navigation params when the Component unmounts.
  componentWillUnmount() {
    this.props.navigation.setParams({searchFunc: null})
  }

  render() {
    return (<View />);
  }
}

Источник

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...