简体   繁体   English

错误:找不到 react-redux 上下文值; 请确保组件被包裹在一个<Provider>在使用 useselector 时

[英]Error: could not find react-redux context value; please ensure the component is wrapped in a <Provider> while using useselector

1.header.js 1.header.js

import Image from "next/image";
import { 
MenuIcon,
SearchIcon,
ShoppingCartIcon,
} from "@heroicons/react/outline";
import { signIn, signOut, useSession } from "next-auth/react";
import { useRouter } from "next/router";
import { useSelector } from "react-redux";
import { selectItems } from "../slices/basketSlice";
import { Provider } from "react-redux";

function Header() {
const { data: session } = useSession();
const router = useRouter();
const items= useSelector(selectItems);

 return (
<header>
   <div className="flex items-center bg-amazon_blue p-1 flex-grow py-2">
     <div className="mt-2 flex items-center flex-grow sm:flex-grow-0">
      <Image
      onClick={() => router.push("/")} 
        src='https://links.papareact.com/f90'
        width={150}
        height={40}
        objectFit="contain"
        className="cursor-pointer"
      />
     </div>
     {/*search bar*/}
     <div className="hidden sm:flex items-center h-10 rounded-md flex-grow cursor-pointer bg-yellow-400 hover:bg-yellow-500">
       <input className="p-2 h-full w-6 flex-grow flex-shrink rounded-l-md focus:outline-none px-4" type="text" />
       <SearchIcon className="h-12 p-4"/>
     </div>
     <div className="text-white flex items-center text-xs space-x-6 mx-6 whitespace-nowrap">
       <div onClick={session ? signIn:signOut} className="link">
         <p className="hover:underline">{session ? session.user.name:"signin"}</p>
         <p  className="font-extrabold md:text-sm">Acount & lists</p>
       </div>

       <div className=" link">
         <p>Returns</p>
         <p className="font-extrabold md:text-sm">& orders</p>
       </div>
       
       <div onClick={() => router.push("/checkout")} className=" link relative flex items-center">
         <span className="absolute top-0 right-0 md:right-10 h-4 w-4 bg-yellow-400 rounded-full text-center text-black font-bold">
           {items.length}
         </span>

       <ShoppingCartIcon className="h-10 "/>
       <p className="hidden md:inline font-extrabold md:text-sm mt-2">Bascket</p>
       </div>
     </div>
  </div>
     {/*bottom nav*/}
  <div className="flex items-center space-x-3 p-2 pl-6 bg-amazon_blue-light text-white text-sm">
    <p  className="link flex items-center ">
      <MenuIcon className="h-6 mr-5"/>
      all</p>
      <p className="link">featured </p>
      <p className="link">new arrival </p>
      <p className="link">catalog </p>
      <p className="link hidden lg-inline-flex">electronics </p>
  </div>
</header>
   );
}

export default Header;
  1. bascketslice.js篮子切片.js

''' '''

import { createSlice } from "@reduxjs/toolkit";

const initialState = {
  items: [],
};

export const basketSlice = createSlice({
  name: "basket",
  initialState,
  reducers: {
    addToBasket: (state, action) => {
      state.items = [...state.items, action.payload]
    },
    removeFromBasket: (state, action) => {},
  },
});

export const { addToBasket, removeFromBasket } = basketSlice.actions;

// Selectors - This is how we pull information from the Global store slice
export const selectItems = (state) => state.basket.items;

export default basketSlice.reducer;

''' '''

  1. product.js产品.js

    ''' '''

    import Image from "next/image";从“下一个/图像”导入图像; import {useState} from "react";从“反应”导入 {useState}; import{ StarIcon} from"@heroicons/react/solid";从“@heroicons/react/solid”导入{ StarIcon}; import Currency from "react-currency-format";从“react-currency-format”导入货币; import { useDispatch } from "react-redux";从“react-redux”导入 { useDispatch }; import {addToBasket} from "../slices/basketSlice";从“../slices/basketSlice”导入{addToBasket};

    const MAX_RATING =5;常量 MAX_RATING =5; const MIN_RATING =1;常量 MIN_RATING =1;

     function Product({id, title, price, description, category,image}) { const dispatch = useDispatch(); const{rating}= useState( Math.floor(Math.random() * (MAX_RATING - MIN_RATING +1)) + MIN_RATING ); const addItemToBascket = () => { const product = {id, title, price, description, category,image}; // sending the product as an action to bascket slice dispatch(addToBasket(product)) };

    return ( {category}返回({类别}

     <Image src={image} height={200} width={200} objectFit="contain" /> <h4 className="flex">{title}</h4> <div className="flex"> {Array(rating) .fill() .map((_, i)=>( <StarIcon className="h-5 text-yellow-500"/> ))} </div> <p className="text-xs my-2 line-clamp-2">{description}</p> <div className="mb-5"> <Currency quantity={price}/> </div> <button onClick={addItemToBascket} className=" mt-auto button">Add to Basket</button> </div>

    ); ); } }

    export default Product '''导出默认产品'''

store.js store.js

import { configureStore } from "@reduxjs/toolkit";
import basketReducer from "../slices/basketSlice";

export const store = configureStore({
  reducer: {
    basket: basketReducer,
  },
});

_app.js _app.js

import { Provider } from 'react-redux'
import { store } from '../app/store'
import '../styles/globals.css'
import { SessionProvider } from "next-auth/react"

const MyApp = ({ Component, pageProps: {session,...pageProps} }) => {
  return (
    <SessionProvider session={session}>
        <Component {...pageProps} />
    </SessionProvider>
  );
};

export default MyApp

我的代码中的文件

how do i use provider in the code我如何在代码中使用提供程序

my repository :- https://github.com/Shadow2389/nmz-2.git我的存储库:- https://github.com/Shadow2389/nmz-2.git

It seems we're both fans of Sonny.看来我们都是桑尼的粉丝。 Your problem there is that you need to wrap up your App.js in您的问题是您需要将 App.js 包装在

<Provider>
 <SessionProvider session={session}>
        <Component {...pageProps} />
    </SessionProvider>
</Provider>

But then you'll most likely have a "Hydration error", if so, just remove the "Math.floor(Math.random() * (MAX_RATING - MIN_RATING +1)) + MIN_RATING"但是你很可能会遇到“水合错误”,如果是这样,只需删除"Math.floor(Math.random() * (MAX_RATING - MIN_RATING +1)) + MIN_RATING"

Apparently with the new updates we can no longer use the useState() hook as we used to, so you have 3 options: 1.- Remove the "Math.floor(Math.random() * (MAX_RATING - MIN_RATING +1)) + MIN_RATING" 2.- Set a fixed rating for all products 3.- Set a number for your API (which you cannot, since you are using FakeStoreAPI)显然,随着新的更新,我们不能再像以前那样使用 useState() 钩子了,所以你有 3 个选项: 1.- 删除"Math.floor(Math.random() * (MAX_RATING - MIN_RATING +1)) + MIN_RATING" 2.- 为所有产品设置固定评级 3.- 为您的 API 设置一个数字(因为您使用的是 FakeStoreAPI,所以您不能这样做)

This is due to basic rules of Hooks, since a Random number is "umpredictable", but now I don't know why it has that problem (although you're setting a min and a max)这是由于 Hooks 的基本规则,因为随机数是“不可预测的”,但现在我不知道它为什么会出现这个问题(尽管您正在设置最小值和最大值)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 错误:找不到 react-redux 上下文值; 请确保组件被包裹在一个<provider> : Redux 与 NextJS</provider> - Error: could not find react-redux context value; please ensure the component is wrapped in a <Provider>: Redux with NextJS 错误:找不到 react-redux 上下文值; 请确保组件被包裹在一个<provider></provider> - Error: could not find react-redux context value; please ensure the component is wrapped in a <Provider> 使用 useContext 钩子获取“错误:找不到 react-redux 上下文值;请确保组件包装在<provider> "</provider> - using useContext hook get "Error: could not find react-redux context value; please ensure the component is wrapped in a <Provider>" 我的测试失败了,因为“找不到 react-redux 上下文值; 请确保组件被包裹在一个<Provider> ” - My tests are failing because of “could not find react-redux context value; please ensure the component is wrapped in a <Provider>” 开玩笑说:“找不到 react-redux 上下文值;请确保组件包装在<provider> "</provider> - In jest : "could not find react-redux context value; please ensure the component is wrapped in a <Provider>" Webpack5 模块联合:“未捕获的错误:找不到 react-redux 上下文值; 请确保组件被包裹在一个<provider> ”</provider> - Webpack5 Module Federation: “Uncaught Error: could not find react-redux context value; please ensure the component is wrapped in a <Provider>” 找不到 react-redux 上下文值错误随机触发 - could not find react-redux context value error triggering randomly Redux 工具包和 React Native。 错误:找不到 react-redux 上下文值; - Redux ToolKit and React Native. Error: could not find react-redux context value; 开玩笑测试 redux 连接的组件给出错误“请确保组件包裹在<provider> ”</provider> - Jest testing redux connected component gives error “ please ensure the component is wrapped in a <Provider>” 提供者react-redux中的错误 - Error in Provider react-redux
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM