【问题标题】:why "map" is not wotking?为什么“地图”不起作用?
【发布时间】:2020-03-20 19:13:17
【问题描述】:

将创建博客帖子,并且可以选择删除帖子。为此,我正在使用钩子。

App.js:

import React, { useState } from 'react';

import Blog from './Blog';
import Createpost from './Createpost';

const App = () => {
    const [posts, setPosts] = useState('');
    const removePosts = (index) => {
        setPosts(posts.filter((post) => post.index !== index));
    };
    return (
        <div style={{ padding: 8 }} className="container">
            <br />
            <hr />
            {<Createpost posts={posts} setPosts={setPosts} />}
            <hr />
            <Blog postData={posts} removePosts={removePosts} />
        </div>
    );
};

export default App;

Createpost.js:

import React, { useState } from 'react';
const Createpost = ({ user, posts, setPosts }) => {
    const [title, setTitle] = useState('');
    const [content, setContent] = useState('');

    const handleTitle = (event) => {
        setTitle(event.target.value);
    };
    const handleContent = (event) => {
        setContent(event.target.value);
    };
    const handleCreate = (event) => {
        const newPost = { title, content, author: user };
        setPosts({ newPost, ...posts });
    };
    return (
        <form
            onSubmit={(e) => {
                e.preventDefault();
                handleCreate();
            }}
        >
            <div>
                author:<b>{user}</b>
            </div>
            <div>
                <label htmlFor="create-title">Title:</label>
                <input
                    tytpe="text"
                    value={title}
                    onChange={handleTitle}
                    name="create-
             title"
                    id="create-title"
                />
            </div>{' '}
            <textarea value={content} onChange={handleContent} />
            <input type="submit" value="Create" />
        </form>
    );
};

export default Createpost;

Blog.js:

import React, { useState } from 'react';
const BlogBody = (props) => {
    const rows = props.postData.map((post, index) => {
        const [title, author, content] = post;
        return (
            <React.Fragment key={index}>
                <h2>{title}</h2>
                <h5>
                    <i>{author}</i>
                </h5>
                <h3>{content}</h3>
                <br />
                <button onClick={() => props.removePosts(index)}>Delete</button>
                <hr />
            </React.Fragment>
        );
    });
    return <div>{rows}</div>;
};
const Blog = () => {
    const [postData, removePosts] = useState('');
    return (
        <div>
            <BlogBody postData={postData} removePosts={removePosts} />
        </div>
    );
};

export default Blog;

执行 npm start 后没有错误显示。但在浏览器中,TypeError: props.postData.map is not a function 在 Blog.js 中显示

有人可以帮我解决这个问题吗?我只是被困在这里似乎永远。

我最近开始使用 reactjs,昨天开始做钩子。所以请帮忙。

【问题讨论】:

    标签: javascript reactjs react-hooks react-hook-form


    【解决方案1】:

    您正在将postData 创建为字符串:

    const [postData, removePosts] = useState('');
    

    如果你希望它是一个数组,你应该改变初始值。

    const [posts, setPosts] = useState([]);
    
    // Add posts:
    setPosts((prevPosts) => [...prevPosts, 'new post'])
    

    【讨论】:

      【解决方案2】:

      Map 函数只能用于数组。

      在这里,您将 postData 的初始状态分配为字符串

      const [postData, removePosts] = useState('');

      请将useState中的初始状态改为数组

      const [postData, removePosts] = useState([]);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-23
        • 1970-01-01
        • 2019-03-18
        • 2011-10-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多