首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将多组数据存储在reactjs的本地存储中?

如何将多组数据存储在reactjs的本地存储中?
EN

Stack Overflow用户
提问于 2022-03-25 15:32:16
回答 2查看 2.5K关注 0票数 0

我有一个名为“Post.js"的页面,在该页面中,我希望单击”Add“按钮并将数据保存到本地存储中。但是在每一次新的点击中,数据都会被前一次替换,而不是添加新的数据。

这里是"Post.js"

代码语言:javascript
复制
const Posts = ({ posts, loading }) => {
    const click = (id, name, bio, link) => {
        //setButtonText(text);
        const obj = {
            id: id,
            name: name,
            bio: bio,
            link: link,
        };
        localStorage.setItem('items', JSON.stringify({ ...obj }));
    };

    if (loading) {
        return <h2>Loading...</h2>;
    }
    return (
        <div className="fav-content">
            <ul className="card">
                {posts.map((item, index) => {
                    console.log(item._id);
                    return (
                        <li key={item._id}>
                            <button
                                onClick={() => click(item._id, item.name, item.bio, item.link)}
                            >
                                Add Favt
                            </button>
                            <Card style={{ width: '18rem' }}>
                                <Card.Body>
                                    <Card.Title>Name: {item.name}</Card.Title>
                                    <Card.Text>Bio: {item.bio}</Card.Text>
                                    <Card.Text>Link: {item.link}</Card.Text>
                                </Card.Body>
                            </Card>
                        </li>
                    );
                })}
            </ul>
        </div>
    );
};

我想从本地存储中获取保存的数据到"Favauth“文件中。

这里是"Favauth.js"

代码语言:javascript
复制
function FavAuthor() {
    const [data, setItems] = useState([]);
    useEffect(() => {
        const localStorageItems = JSON.parse(localStorage.getItem('items'));
        console.log(localStorageItems);
        if (localStorageItems) {
            setItems(localStorageItems);
        }
    }, []);
    return (
        <>
            <div className="fav-content">
                <ul className="card">
                    <li key={data.id}>
                        <Card style={{ width: '18rem' }}>
                            <Card.Body>
                                <Card.Title>Name: {data.name}</Card.Title>
                                <Card.Text>Bio: {data.bio}</Card.Text>
                                <Card.Text>Link: {data.link}</Card.Text>
                            </Card.Body>
                        </Card>
                    </li>
                </ul>
            </div>
        </>
    );
}
EN

回答 2

Stack Overflow用户

发布于 2022-03-25 16:35:03

您正在替换数据,而不是将其附加到现有的数据中。您应该首先检索旧数据。然后合并新数据和旧数据,然后将其保存在localStorage中的posts.js中。

代码语言:javascript
复制
let oldData = JSON.parse(localStorage.getItem('items'))
localStorage.setItem('items', JSON.stringify([ ...oldData, ...obj ]));

然后在FavAuth.js中,您应该循环遍历localStorage中的项。

代码语言:javascript
复制
...
{data.map(post => (
    <li key={post.id}>
       <Card style={{ width: '18rem' }}>                            
         <Card.Body>
                                    
            <Card.Title>Name: {post.name}</Card.Title>
                                    
            <Card.Text>Bio: {post.bio}</Card.Text>                               
            <Card.Text>Link: {post.link}</Card.Text>
                                
         </Card.Body>
       </Card>
 </li>
))
}
...
票数 1
EN

Stack Overflow用户

发布于 2022-03-25 16:53:51

这是渲染的问题。尝试这个钩子以呈现最新的localStorage数据,而不是上一个数据:https://usehooks.com/useLocalStorage/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71619497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档