Как исправить отображение состояний, которое не является функцией в React Native?

В настоящее время я изучаю React Native и исследую процесс рендеринга данных api в виде списка. Прямо сейчас у меня уже есть данные api, когда я попытался сопоставить массив, который он говорит.

TypeError: this.state.readings.map is not a function. (In 'this.state.readings.map(function (value) { return console.info(value); })', 'this.state.readings.map' is undefined)

Вот пример API:

Пример JSON

Внутри моего ComponentDidMount:

componentDidMount() {
  
    fetch('http://myip:3000/api/readings/3')
    .then(response => response.json())
    .then(data => this.setState({readings:JSON.stringify(data)}))
}

Мое состояние:

this.state = {
  readings:[],
}

Мой рендер:

render() {
    console.info(this.state.readings);
    return (
       
        {

            this.state.readings.map(value => {
                return (
                    console.info(value)
                )
            })

        }         
    )
}

Если вы можете добавить свой пример в песочницу кода, это поможет.

Mohamed Abu Galala 08.04.2021 21:27
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
1
28
2

Ответы 2

Я знаю, что здесь используется функциональный компонент, но поведение будет таким же.

https://snack.expo.io/I0VJsF1z5

Проблема может быть в этой строчке .then(data => this.setState({readings:JSON.stringify(data)}))

@Mohammed Я использую для этого react native. Я уже пробовал вашу работу, однако в ней говорится, что текстовые строки должны отображаться в компоненте <Text>.

DevGe 08.04.2021 21:29

Вы правы, я упустил этот момент. попробуйте это с помощью <Text>, и давайте посмотрим, работает ли это

Mohamed Abu Galala 08.04.2021 21:31

@Mohammed говорит, что ошибка: текстовые строки должны отображаться в компоненте <Text>. не изменить

DevGe 08.04.2021 21:32

Отредактировано, если вы можете поделиться своим кодом в этом приложении, это будет полезно snake.expo.io

Mohamed Abu Galala 08.04.2021 21:44

позвольте мне примерить это.

DevGe 08.04.2021 21:47

Обновлен пример с массивом, который вы отправили в другом комментарии.

Mohamed Abu Galala 08.04.2021 21:48

@ Мохаммед да вот и обновлено.

DevGe 08.04.2021 21:49

Ваша проблема может быть из-за этой строки .then(data => this.setState({readings:JSON.stringify(data)})) , убедитесь, что она возвращает массив

Mohamed Abu Galala 08.04.2021 22:01

Да, вопрос: он говорит, что после того, как я изменил код, он показывает другую ошибку, что текстовые строки должны отображаться в компоненте <Text>?

DevGe 08.04.2021 22:10

РЕДАКТИРОВАТЬ

Если значение this.state.readings равно [{"id":1,"AccountNo":"011-001","ConsName":"Jenny Fox.","Address":"Pacific Triad Road."}].

Тогда этот код должен работать.

И поскольку ваши данные загружаются асинхронно. Вы можете добавить проверку this.state.readings перед его отображением.

export default class App extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      readings: [
        {
          id: 1,
          AccountNo: "011-001",
          ConsName: "Jenny Fox.",
          Address: "Pacific Triad Road."
        }
      ]
    };
  }
  render() {
    return (
      this.state.readings.length &&
      this.state.readings.map((value) => {
        console.info(value);
        return <div>{value.Address}</div>;
      })
    );
  }
}

ссылка: https://codesandbox.io/s/ancient-cdn-5695m?file=/src/App.js:51-484

Это не работает.

DevGe 08.04.2021 21:38

@DevGe Что вы хотите вернуть с карты?

saksh73 08.04.2021 21:40

Не могли бы вы показать результат для вашего this.state.reading?

saksh73 08.04.2021 21:41

да, я хочу вернуть все данные в списке, однако у меня возникла ошибка TypeError: this.state.readings.map не является функцией. (В 'this.state.readings.map (function (value) {return console.info (value);})' this.state.readings.map не определен)

DevGe 08.04.2021 21:41

[{"id": 1, "AccountNo": "011-001", "ConsName": "Jenny Fox.", "Address": "Pacific Triad Road."}]

DevGe 08.04.2021 21:44

Сделал правку ... надеюсь, что это поможет.

saksh73 08.04.2021 21:50

Этот код работает ? snake.expo.io/Dm5_RbAe0

Mohamed Abu Galala 08.04.2021 21:53

Да, вопрос: он говорит, что после того, как я изменил код, он показывает другую ошибку, что текстовые строки должны отображаться в компоненте <Text>? \

DevGe 08.04.2021 22:08

Другие вопросы по теме