React native alert показывает ошибку при наличии onPress на кнопке OK

udarts спросил: 28 апреля 2018 в 09:19 в: react-native

Я пытаюсь показать предупреждение при использовании коммутатора (atm только на Ios), но он показывает ошибку:

JSON value '({text = OK;})' of type NSMutableArray cannot be converted to NSString

Это пример кода, который я использую используя:

import React, { Component } from 'react';
import { StyleSheet,Text,View,Button,TouchableOpacity,TextInput,AsyncStorage,ScrollView, Alert,Switch } from 'react-native';
import RNRestart from 'react-native-restart';export default class ProfileScreen extends Component {    
    constructor(props) {
        super(props);
        this.state = {
            colorPattern: false
        }
    }    saveThemeColour(color) {
        if(color) {
            AsyncStorage.setItem('themeColour', 'default');
            this.setState({colorPattern: true});
            Alert.alert(
                I18n.t('restart theme change'),
                [
                    {text: 'OK', onPress: () => RNRestart.Restart()}
                ],
                { cancelable: false }
            )
        }else{
            AsyncStorage.setItem('themeColour', 'white');
            this.setState({colorPattern: false});
        }
    }
    <Switch value={this.state.colorPattern} onValueChange={ (value) => this.saveThemeColour(value)}/>
}

Он отлично работает, когда я просто оставляю заголовок предупреждения.


1 ответ

Есть решение
zvona ответил: 28 апреля 2018 в 09:24

Вам не хватает параметра message:

Alert.alert(
  I18n.t('restart theme change'),
  <here-comes-the-message-as-string>,
  [
    {text: 'OK', onPress: () => RNRestart.Restart()}
  ],
  { cancelable: false }
)
udarts ответил: 28 апреля 2018 в 09:25
Это обязательно?
zvona ответил: 28 апреля 2018 в 09:27
Конечно, это может быть пустым, но в настоящий момент RN предполагает, что вы передаете строку сообщения, но вы фактически передаете этот массив объектов. Это вызывает ошибку.
udarts ответил: 28 апреля 2018 в 09:55
Спасибо, что это действительно так.