我正在创建一个最喜欢的 react 列表。我已经能够添加、获取和删除本地存储中的项目。我如何让心形按钮持续存在

Posted

技术标签:

【中文标题】我正在创建一个最喜欢的 react 列表。我已经能够添加、获取和删除本地存储中的项目。我如何让心形按钮持续存在【英文标题】:I am creating a favorite list on react. I have been able to add, get and remove the items in localstorage. How do i make the heart button persist 【发布时间】:2021-12-02 23:04:09 【问题描述】:

我正在使用 localstorage 创建一个最喜欢的 react 列表。我已经能够添加、获取和删除localstorage 中的项目。但问题是,在“Works”部分,心形图标在刷新后不会持续存在,即它返回到“不喜欢”图标,即使该项目仍在 Favorites 部分。我使用 react-context 来处理篮子的状态

下面是sn-ps和图片;

Home.jsx

    <div className="works-gallery">
      allWorks.map((work, index) => 
        return (
          <Works
            key=work.id
            id=work.id
            img=work.img
            category=work.category
          />
        );
      )
    </div>
  </section>

Works.jsx

function handleClick() 
setToggl(!toggl);
if (!toggl) 
  setIcon(<Favorite style= color: "black", cursor: "pointer"  />);
  addToBasket();
 else 
  setIcon(
    <FavoriteBorderIcon
      style= color: "rgba(0, 0, 0, 0.726)", cursor: "pointer" 
    />
  );
  removeFromBasket();

.
.
.
return (
<div className="works-div">
  <div
    onClick=() => 
      props.viewThisProject(props.id);
    
  >
    <img src=props.img  className="works-img" />
    <div className="overlay">
      <RemoveRedEye titleAccess="VIEW PROJECT" />
    </div>
  </div>

  <article className="work-info">
    <div className="category-div">
      <p>props.category</p>
      <div></div>
    </div>

    <div className="fav-btn btns" onClick=handleClick>
      icon
    </div>
  </article>
</div>

);

Favorites.jsx

function Checkout(props) 
  const [ basket ] = useStateValue();
  const [contactDiv, setContactDiv] = useState();

  useEffect(() => 
    localStorage.setItem("favorites", JSON.stringify(basket));
  , [basket]);

  function displayContactDiv() 
setContactDiv(
  <Contact
    containerClass="checkout-contactDiv"
    container2="checkout-contactDiv2"
    close="Close"
    closeClass="checkout-contact-close-btn "
    onClose=Close
  />
    );
 
  function Close() 
    setContactDiv();
  

  return (
   <>
  <MyFavNavbar onDisplayContactDiv=displayContactDiv />
  <div className="main-contactDiv-body">contactDiv </div>

  <div className="checkout">
    <div className="checkout-left">
      <div className="checkout-ad">
        <p>My Favorites</p>
      </div>

      basket?.length === 0 ? (
        <div>
          <h2>Your Favorites Section Is Empty</h2>
          <p>
            You have no favorite. To add one or more favorite work(s) simply
            click on the 'heart' icon next to the item" "
          </p>
        </div>
      ) : (
        <div>
          <h2 className="checkout-title">My Favorite Designs</h2>

          /* list out all the checkout products */
          <div className="works">
            basket.map((work, index) => 
              return (
                <FavoriteWork
                  key=work.id
                  id=work.id
                  img=work.img
                  category=work.category
                />
              );
            )
          </div>
        </div>
      )
    </div>
  </div>
</>

);

Checkout the favorite buttons on all works

Checkout the favorites are no longer marked

【问题讨论】:

【参考方案1】:

创建一个状态并将收藏夹保存在那里。

const [favProducts , setFavProducts] = useState([])

每次单击该特定产品的收藏图标时,将其更新为状态。

然后使用“useEffect”

useEffect(() => 
   yourFunction()
,[favProducts])

现在使用 favProducts 状态确保在页面刷新时点击收藏夹。

【讨论】:

谢谢先生,但请您详细说明一下。我做了一些修改

以上是关于我正在创建一个最喜欢的 react 列表。我已经能够添加、获取和删除本地存储中的项目。我如何让心形按钮持续存在的主要内容,如果未能解决你的问题,请参考以下文章

这是在 localStorage 中存储数据列表并在使用 React 应用程序搜索时显示它们的最佳方式

iOS - 将用户最喜欢的对象列表保存在内存中的最佳方式

创建我的收藏夹列表

[react] 你最喜欢React的哪一个特性(说一个就好)

Spotify - 如何创建一个播放列表,包括艺术家的某些专辑

React + Redux + Axios 在创建动作后不加载组件