React Native: json .data не является функцией. (В 'json .data ()', * json .data 'является экземпляром Array)] - PullRequest
2 голосов
/ 18 марта 2020

Я пытаюсь отобразить данные из моей сети с помощью API. Мой API работает правильно. Но кое-как я сталкиваюсь с этой проблемой json.data is not a function. (In 'json.data()', 'json.data' is an instance of Array)]. Могу ли я кто-нибудь помочь мне в этом?

 _loadInitialState = async () => {

        const token = await AsyncStorage.getItem('token');
        const myArray = await AsyncStorage.getItem('language_type');
        _onSetLanguage(myArray)

        var loadAll = this.props.navigation.getParam('loadAll');
        if (loadAll == true) { this.setState({ isLoading: true }) }

        var have_access = this.props.navigation.getParam('have_access');
        if (have_access != undefined) { this.setState({ have_access: have_access }) }
        if (staticData.get_centre_settings() != null) { this.setState({ have_access: true }) }

        let today = Moment();
        this.setState({
            today: Moment(today).format('YYYY-MM-DD'),
        })

        // alert(FetchURL.get_baseURL() +  "leave?centre_id=" + staticData.get_centre_settings().centre.centre_id)
        // alert(token)
        // return
        fetch(FetchURL.get_baseURL() +  "leave?centre_id=" + staticData.get_centre_settings().centre.centre_id, {
            method: 'GET',
            headers: {
                'Authorization': 'Bearer '+ token,

            }
        })
        .then(response => response.json())
        .then((json) => {
            // alert(json)
            if (json.error) {
                alert(json.error);
            } else {
                this.setState({
                    staffLeave: json.data(),
                    isLoading: false
                });


            }

        })
        .catch((err) => {
            console.log(err)
            alert(err)
            // alert(strings.data_fail);
        })
    this.setState({ view_access: true })


    }

Я продолжал искать это, но не мог найти ответ, который прояснит это.

Спасибо!

Ответы [ 3 ]

1 голос
/ 18 марта 2020

У вас есть ответ после response.json() как json. Если вы хотите сохранить его в состояние, используйте json.data, а не json.data(), так же как вы проверяете для json.error.

0 голосов
/ 18 марта 2020
// alert(json)
            if (json.error) {
                alert(json.error);
            } else {
                this.setState({
                    staffLeave: json.data(),
                    isLoading: false
                });


            }

Заменить на

 if (json.error) {
                alert(json.error);
            } else {
                this.setState({
                    staffLeave: json.data,
                    isLoading: false
                });
            }

надеюсь , это работа.

0 голосов
/ 18 марта 2020

Когда вы читаете ошибку json.data is not a function. (In 'json.data()', 'json.data' is an instance of Array)]

Это говорит вам о том, что json.data не является вызываемой функцией. Поэтому json.data() не будет работать. json.data - массив для сообщения об ошибке. Вы могли бы получить доступ к некоторой части этого следующим образом: json.data[0] Но вы бы хотели проверить длину этого массива и понять тип (который помогает решить Typescript).

...