реагировать нативно, если оператор else не будет запускать функцию автоматически - PullRequest
0 голосов
/ 28 сентября 2018

пытается запустить функцию в операторе if else в реагировать на натив, однако, если я просто вызываю ее прямо как this.removeAlert (), я получаю аварийное завершение цикла из-за вызова setState.Я читал, что вы должны вызывать его внутри функции, которая прекрасно работает в функциях onPress, но для меня это не работает вне этого.

  class Settingscontainer extends Component {
  constructor() {
   super();
   this.removeAlert = this.removeAlert.bind(this);
  }
  removeAlert = () => {
    console.log("please work");
    // this.setState({ successAlert: false });
  };

  render() {
    this.props.isFocused
      ? console.log("Focused") // console.log working
      : () => {                // not working
          this.removeAlert();
        };
    return(<View>code...</View>
    )  
    }}
     

1 Ответ

0 голосов
/ 28 сентября 2018

То, что вы делаете, эквивалентно этому:

function callRemoveAlert() {
  this.removeAlert();
}
this.props.isFocused
    ? console.log("Focused")
    : callRemoveAlert

Вы определяете функцию для вызова this.removeAlert(), но никогда не вызываете эту функцию.Чтобы заставить ваш код работать, вам нужно сделать:

this.props.isFocused
    ? console.log("Focused")
    : this.removeAlert()

Но поскольку в removeAlert вы намереваетесь изменить состояние, поэтому Я не думаю, что вы должны делать это таким образом .По умолчанию компонент React при каждом изменении реквизита и состояния вызывает render.В вашей реализации render вызовет setState, а изменение состояния вызовет render, вызывая бесконечный цикл обновления и рендеринга состояния.Лучший способ сделать это - использовать componentDidUpdate:

componentDidUpdate(prevProps) {
    if (this.props.isFocused !== prevProps.isFocused) {
      (this.props.isFocused) ?
      ? console.log("Focused")
      : this.removeAlert();
    }
}

render() {
    return(<View>code...</View>
    )  
    }}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...