У меня много проблем с реализацией 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
.
Почему он не обновляется, как я ожидал?