реагировать в ожидании на свойство компонента - PullRequest
0 голосов
/ 30 июня 2018

У меня есть компонент, который раньше вызывал функцию синхронизации executeCode. Проблема в том, что у меня executeCode есть асинхронная функция, эти функции возвращают true или false, но теперь моя функция асинхронная, мне нужно использовать await, чтобы получить значение, потому что асинхронные функции дают обещание. Проблема в том, что я не могу использовать await, я пробовал анонимную функцию или обещание с .then(), но это не применимо в этом случае, потому что мне нужно мгновенное значение. executeCode теперь асинхронный, потому что он необходим для других операций.

executeCode = async ( methodCode ='', params = {} ) => {
  const result = await crudCode[methodCode](params);
  return result.valueToReturn;
};

render() {
  return (
    <Field
      name="datedeferred"
      component={FormField}
      executeCode={this.executeCode}
      typeInput="text"
      disabled={ 
        this.executeCode( 'onDisabled', { inputFullNameWithLine: 'datedeferred',formProps: this.props })
      }
    />
  );
}

1 Ответ

0 голосов
/ 30 июня 2018

Вы можете запустить вашу функцию async в componentDidMount, вместо этого поместить результат в state и использовать ее.

Пример

function someAsyncCheck() {
  return new Promise(resolve => setTimeout(() => resolve(true), 1000));
}

class App extends Component {
  state = { loading: true, disabled: false };

  async componentDidMount() {
    const result = await someAsyncCheck();
    this.setState({ loading: false, disabled: result });
  }

  render() {
    const { loading, disabled } = this.state;

    if (loading) {
      return null;
    }

    return <input disabled={disabled} />;
  }
}
...