首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何坚持使用简单的方法来保存本地存储?

我如何坚持使用简单的方法来保存本地存储?
EN

Stack Overflow用户
提问于 2022-02-12 19:56:02
回答 2查看 496关注 0票数 0

我正在建立一个反应电子商务网站,我正在使用简单-农民的剩馀。当我添加到cart时,我想坚持使用localStorage。我在他们的文档中找不到任何关于如何持久化到localStorage的信息。easy被配置为持久化为sessionStorage;尽管有人提到可以将其配置为localStorage。

我目前可以添加到cart,但不能设置为localStorage。

下面是我的store.js和产品页面

代码语言:javascript
复制
    import { createStore, action } from 'easy-peasy';

    const store = createStore({
    cartItems: JSON.parse(localStorage.getItem('cartItems')) ?? [],
    addToCart: action((state, payload) => {
    return {
    ...state,
    cartItems: [...state.cartItems, payload],
   };
   }),
   });

   export default store;

//主页(产品页)

代码语言:javascript
复制
   import { collection, addDoc, getDocs } from 'firebase/firestore';
   import { db } from '../../firebase/config';
   import { products } from '../../figsofeden-products';
   import { Card, Row, Container, Col } from 'react-bootstrap';
   import { Link, useNavigate } from 'react-router-dom';
   import { useState, useEffect } from 'react';
   import { useStoreActions, useStore } from 'easy-peasy';

 const Home = () => {
 const [products, setProducts] = useState([]);
 const navigate = useNavigate();

 useEffect(() => {
 getData();
 }, []);

async function getData() {
try {
  const products = await getDocs(collection(db, 'products'));
  const productsArray = [];
  products.forEach((doc) => {
   
    const obj = {
      id: doc.id,
      ...doc.data(),
    };

    productsArray.push(obj);
  });

  setProducts(productsArray);
} catch (error) {
  console.log(error);
  }
 }

const addToCart = useStoreActions((actions) => actions.addToCart);

return (
<Layout>
  <Container fluid className="product-directory mx-auto">
    <Row xs={1} md={2} lg={3} className="g-2">
      {products.map((product, index) => {
        return (
          <Col key={product.id} className="g-2">
            <Card>
              <div className="product-wrapper position-relative">
                <div className="product-content">
                  <Card.Img
                    variant="top"
                    src={product.imageURL}
                    alt="img"
                  />
                  <Card.Body>
                    <Card.Text>{product.name}</Card.Text>
                    <Card.Text>NGN {product.price}</Card.Text>
                  </Card.Body>
                </div>
                <div className="product-actions">
                  <h3> NGN {product.price}</h3>
                  <div className="d-flex">
                    <button
                      className="mx-2"
                      disabled={product.quantity === 0 ? 'true' : ''}
                      onClick={() => addToCart(product)}
                    >
                      ADD TO CART
                    </button>
                    <button
                      onClick={() => {
                        navigate(`/productinfo/${product.id}`);
                      }}
                    >
                      VIEW
                    </button>
                  </div>
                  <div className="outofstock">
                    <p>
                      <em>{product.quantity > 0 ? '' : 'Out Of Stock'}</em>
                    </p>
                  </div>
                </div>
              </div>
            </Card>
          </Col>
        );
      })}
    </Row>
  </Container>
 </Layout>
  );
 };

export default Home;
EN

回答 2

Stack Overflow用户

发布于 2022-02-12 20:25:40

代码语言:javascript
复制
addToCart: action((state, payload) => {

// define cartItems with needed state values
const cartItems = [...state.cartItems, payload]

// after set it to local storage
window.localStorage.setItem("cartItems", JSON.stringfy(cartItems))

// and return the new state
return {
   ...state,
   cartItems
};
票数 1
EN

Stack Overflow用户

发布于 2022-02-17 15:20:41

使用简便易行的持久化助手

https://easy-peasy.vercel.app/docs/api/persist.html

代码语言:javascript
复制
// store.js

import { createStore, action } from 'easy-peasy';

const store = createStore(
    persist({
        cartItems: [],
        addToCart: action((state, payload) => {
            cartItems.push(payload)
        }),
    }, {
        storage: 'localstorage'
    })
);

export default store;

注意:您可以在更新您的存储库的操作中直接更改状态--通过二聚体将突变转化为针对您的存储的不可变更新。

所以用吧

代码语言:javascript
复制
cartItems.push(payload)

而不是

代码语言:javascript
复制
return {
    ...state,
    cartItems: [...state.cartItems, payload],
}

另外,我建议把你的产品储存在商店里,然后通过雷鸣般的方式收回它们。

https://easy-peasy.vercel.app/docs/api/thunk.html

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

https://stackoverflow.com/questions/71095375

复制
相关文章

相似问题

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