【问题标题】:I am trying to fetch All text(tweet like a post) from database. REACT NATIVE我正在尝试从数据库中获取所有文本(像帖子一样的推文)。反应原生
【发布时间】:2020-02-15 02:32:04
【问题描述】:

我正在尝试从数据库中获取所有文本(像帖子一样的推文)。但它显示错误 TypeError: undefined is not a function (near '...posts.map...')

下面是我的代码:

import React, {useEffect, useState} from 'react';
    import {ActivityIndicator, Text, View, FlatList} from 'react-native';
    import stylesheet from '../src/styles/HomeStyle';
    import AsyncStorage from '@react-native-community/async-storage';

    function FeedScreen() {
      // const [posts, setPosts] = useState('loading');
      const [posts, setPosts] = useState({
        text: '',
        id: '',
      });
      const Boiler = async () => {
        const token = await AsyncStorage.getItem('token');
        fetch('http://192.168.1.5:3000/post', {
          headers: new Headers({
            Authorization: 'Bearer ' + token,
          }),
        })
          .then(res => res.json())
          .then(res => {
            setPosts(res.posts);
          })
          .catch(err => console.log(err));
      };
      useEffect(() => {
        Boiler();
      }, []);

      return (
        <View style={stylesheet.container}>
          {posts.map(post => (
            <Text key={post.id}>{post.text}</Text>
          ))}
        </View>
      );
    }

    export default FeedScreen;

【问题讨论】:

  • posts 初始值是一个对象,所以它不能被映射。也许应该是:[{text: "",id: ""}] 或只是[]

标签: node.js react-native react-hooks


【解决方案1】:

问题是帖子的初始值是帖子而不是帖子数组。我还重命名了Boiler,因为初始大写应该为组件或类保留,并将其移到useEffect

const FeedScreen = () => {
    const [posts, setPosts] = useState([]); // Here was the issue

    useEffect(() => {
        const boiler = async () => {
            const token = await AsyncStorage.getItem("token");
            fetch("http://192.168.1.5:3000/post", {
                headers: new Headers({
                    Authorization: "Bearer " + token
                })
            })
                .then(res => res.json())
                .then(res => {
                    setPosts(res.posts);
                })
                .catch(err => console.log(err));
        };

        boiler();
    }, []);

    return (
        <View style={stylesheet.container}>
            {posts.map(post => (
                <Text key={post.id}>{post.text}</Text>
            ))}
        </View>
    );
};

export default FeedScreen;

【讨论】:

    猜你喜欢
    • 2018-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-02
    相关资源
    最近更新 更多