Загрузка / обновление пользовательского интерфейса после разрешения SMS.isAvailableAsync () - PullRequest
0 голосов
/ 25 июня 2019

У меня много проблем с реализацией expo-sms, потому что это асинхронно ..

Мне бы хотелось оставить заставку включенной, пока я не получу ответ (если возможно SMS), а затем добавить его в мой Context.js (React.createContext()). Но мне пришлось сдаться и вместо этого попытаться обновить пользовательский интерфейс, как только я получил ответ.

Это моя попытка

// PureComponent
...
  state = {
    dishToOrder: null,
  }
...
async componentDidMount() {
    const smsCapable = await SMS.isAvailableAsync()
    this.setState({ smsCapable }, () => console.log('SMS: ', smsCapable))
  }

  ...

  render() {
    ...
    return (
      <ContextConsumer>
        {({ dishes, cart, addToCart, smsCart, clearCart }) => {
          return (
            <View style={styles.container}>
              ...
              <FlatList
                data={dishes}
                renderItem={({ item, index }) => (
                  <Dish
                    ...
                    smsCapable={this.state.smsCapable}
                  />
                )}
              />

внутри render() из Dish (до return) я делаю console.log(this.props.smsCapable), и он записывает некоторые undefined (как исключено). Но, похоже, он не рендерится заново, хотя prop smsCapable должен быть обновлен после обновления state.

Почему он не обновляется, как я ожидал?

...