Как получить ссылку на TextInput, который определяют в статических опциях навигации? - PullRequest
0 голосов
/ 05 сентября 2018

Я сталкиваюсь с проблемой получения ссылки на TextInput, которая определена в статических navigationOptions, это какой-либо способ сделать это в React Native? Я делюсь некоторым кодом здесь, чтобы вы лучше знали о моих вопросах.

export default class SearchClass extends React.Component {
    static navigationOptions = ({ navigation }) => {
    const { params = {} } = navigation.state;
    let headerTitle = (
        <View style={{flex: 1}}>
            <TextInput
                style={{ flex: 1, height: 30 }}
                placeholder='Search'
                keyboardType='default'
                returnKeyType='search'
                underlineColorAndroid='transparent'
                onChangeText={text => params.onChangeText(text)}
                onSubmitEditing={(event) => { params.onSearchButton()    
                 }}
            />
        </View>
    );

    return { headerTitle };
  };

 componentDidMount() {
    this.props.navigation.setParams({
        onChangeText: this.__onChangeSearchText,
        onSearchButton: this.__onSearchButtonPress
    });
  }

__onSearchButtonPress = () => {
    // clear the text of TextInput
    // for that i need reference here of TextInput
    this.mySearchBox.clear();
 }

}

_onSearchButtonPress Мне нужно очистить текст TextInput, для этого мне нужна ссылка на тот TextInput, который определен в navigationOptions? кто-нибудь знает как это сделать?

1 Ответ

0 голосов
/ 10 июля 2019

Я добавил статическую переменную внутри класса

static textField = null;

и затем назначьте его внутри navigationOptions

<TextInput
  ref={(ref) => YourClass.textField = ref}
    ...

затем, когда мне нужно передать события (не уверен, что это лучший способ), я либо выполняю прослушиватель pubsub-js и публикую событие, либо пересылаю события - оба способа объяснены с помощью кода ниже.

<TextInput
  ref={(ref) => YourClass.textField = ref}
  onChangeText={(text) => {
    YourClass.textField.onChangeText(text);
//    PubSub.publish(Constants.FIELD_DID_CHANGE, [text,]);
  }}

тогда когда didFocus - viewDidAppear эквивалент

let textField = YourClass.textField;
textField.onChangeText = (text) => this._textFieldDidChange(text);

или зарегистрировать PubSub объект в componentDidMount

// this.textFieldDidChangeListener = PubSub.subscribe(Constants.FIELD_DID_CHANGE, (msg, data) => this._textFieldDidChange(data));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...