Javascript 渲染不是一个函数

Javascript 渲染不是一个函数,javascript,reactjs,Javascript,Reactjs,我第一次尝试使用上下文并发现这个问题 我在App.js文件中使用了provider(即层次结构的顶部),以便所有子组件都可以使用它 这是我的上下文文件。 import React from 'react'; const CartContext = React.createContext({ items:[], totalAmount:0, addItem: (item) => {}, removeItem: (id) => {} }

我第一次尝试使用上下文并发现这个问题

我在App.js文件中使用了provider(即层次结构的顶部),以便所有子组件都可以使用它

这是我的上下文文件。

import React from 'react';

const CartContext = React.createContext({
      items:[],
      totalAmount:0,
      addItem: (item) => {},
      removeItem: (id) => {}
});

export default CartContext;
这是我的app.js

import Cart from "./Components/Cart/Cart";
import Header from "./Components/Layout/Header";
import Meals from "./Components/Meals/Meals";
import CartProvider from "./Store/CartProvider";
function App() {

  const [cartVisible,setCartVisible] = useState(false);

  const showCartHandler=()=>{
    setCartVisible(true);
  };

  const hideCartHandler =()=>{
    setCartVisible(false);
  };

  return (
    <CartProvider>
    {cartVisible && <Cart onClose={hideCartHandler} />}
      <Header onCartVisible={showCartHandler}/>
      <main>
        <Meals/>
      </main>
    </CartProvider>
  );
}

export default App;
从“/Components/Cart/Cart”导入购物车;
从“/Components/Layout/Header”导入标题;
从“/组件/膳食/膳食”导入膳食;
从“/Store/CartProvider”导入CartProvider;
函数App(){
const[cartVisible,setCartVisible]=useState(false);
常量showCartHandler=()=>{
setCartVisible(真);
};
恒量hideCartHandler=()=>{
设置为可见(假);
};
返回(
{cartVisible&&}
);
}
导出默认应用程序;
这是我的provider.js文件

import { useReducer } from "react";
import CartContext from "./Cart-Context";

const defaultCartState={
      items:[],
      totalAmount:0,

};

const cartReducer = (state, action)=>{
      if(action.type === 'ADD_CARTITEM'){
            const updatedItems = state.items.concat(action.item);
            const updatedTotalAmount = state.totalAmount+ action.item.price*action.item.amount;
            return{
                  item:updatedItems,
                  totalAmount:updatedTotalAmount
            };
      }
      return defaultCartState;
};

const CartProvider = (props) => {

      const [cartState,dispatchCartAction] = useReducer(cartReducer, defaultCartState);

      const addItemHandler = (item) => {
            dispatchCartAction({type:'ADD_CARTITEM',item:item});
      };

      const removeItemHandler = (id) => {
            dispatchCartAction({type:'REMOVE_CARTITEM',id:id});
      };

      const cartContext ={
            item: cartState.items,
            totalAmount:cartState.totalAmount,
            addItem: addItemHandler,
            removeItem: removeItemHandler
      }

      return(
            <CartContext value={cartContext}>{props.children}</CartContext>
      );
};

export default CartProvider;
import { useContext } from "react";
import CartContext from "../../Store/Cart-Context";
import CartItem from "./CartItem";
import styles from "./Cart.module.css";
import Modal from "./Modal";


const Cart = (props) =>{
      const cartCtx = useContext(CartContext);

      const totalAmount = `₹${cartCtx.totalAmount.toFixed(2)}`;

      const cartItemAddHandler= (item) => {

      };

      const cartItemRemoveHandler=(id) => {

      };

      const cartItem = <ul className={styles['cart-items']}>
            {
                  cartCtx.items.map((item)=>
                  <CartItem 
                  key={item.id} 
                  name={item.name} 
                  amount={item.amount}
                  price={item.price} 
                  onAdd={cartItemAddHandler.bind(null,item)}
                  onRemove={cartItemRemoveHandler.bind(null,item.id)}      
                  />)
            }</ul>

      return(
            <Modal onClose={props.onClose}>
                  {cartItem}
                  <div className={styles.total}>
                        <span>Total Amount</span>
                        <span>{totalAmount}</span>
                  </div>
                  <div className={styles.actions}>
                        <button className={styles['button--alt']} onClick={props.onClose} >Close</button>
                        {cartCtx.items.length>0 &&   <button className={styles.button}>Order</button>}
                  </div>
            </Modal>
      );
};

export default Cart;
从“react”导入{useReducer};
从“/Cart Context”导入CartContext;
常量默认状态={
项目:[],
总数:0,
};
const cartReducer=(状态、操作)=>{
如果(action.type=='ADD\u CARTITEM'){
const updateItems=state.items.concat(action.item);
const updatedTotalAmount=state.totalAmount+action.item.price*action.item.amount;
返回{
项目:updatedItems,
totalAmount:UpdateTotalAmount
};
}
返回默认状态;
};
const CartProvider=(道具)=>{
const[cartState,dispatchCartAction]=useReducer(cartReducer,defaultCartState);
常量addItemHandler=(项)=>{
dispatchCartAction({type:'ADD_CARTITEM',item:item});
};
常量removeItemHandler=(id)=>{
dispatchCartAction({type:'REMOVE_CARTITEM',id:id});
};
常量上下文={
项目:cartState.items,
totalAmount:cartState.totalAmount,
addItem:addItemHandler,
removeItem:removeItemHandler
}
返回(
{props.children}
);
};
导出默认提供程序;
这是我的渲染文件

import { useReducer } from "react";
import CartContext from "./Cart-Context";

const defaultCartState={
      items:[],
      totalAmount:0,

};

const cartReducer = (state, action)=>{
      if(action.type === 'ADD_CARTITEM'){
            const updatedItems = state.items.concat(action.item);
            const updatedTotalAmount = state.totalAmount+ action.item.price*action.item.amount;
            return{
                  item:updatedItems,
                  totalAmount:updatedTotalAmount
            };
      }
      return defaultCartState;
};

const CartProvider = (props) => {

      const [cartState,dispatchCartAction] = useReducer(cartReducer, defaultCartState);

      const addItemHandler = (item) => {
            dispatchCartAction({type:'ADD_CARTITEM',item:item});
      };

      const removeItemHandler = (id) => {
            dispatchCartAction({type:'REMOVE_CARTITEM',id:id});
      };

      const cartContext ={
            item: cartState.items,
            totalAmount:cartState.totalAmount,
            addItem: addItemHandler,
            removeItem: removeItemHandler
      }

      return(
            <CartContext value={cartContext}>{props.children}</CartContext>
      );
};

export default CartProvider;
import { useContext } from "react";
import CartContext from "../../Store/Cart-Context";
import CartItem from "./CartItem";
import styles from "./Cart.module.css";
import Modal from "./Modal";


const Cart = (props) =>{
      const cartCtx = useContext(CartContext);

      const totalAmount = `₹${cartCtx.totalAmount.toFixed(2)}`;

      const cartItemAddHandler= (item) => {

      };

      const cartItemRemoveHandler=(id) => {

      };

      const cartItem = <ul className={styles['cart-items']}>
            {
                  cartCtx.items.map((item)=>
                  <CartItem 
                  key={item.id} 
                  name={item.name} 
                  amount={item.amount}
                  price={item.price} 
                  onAdd={cartItemAddHandler.bind(null,item)}
                  onRemove={cartItemRemoveHandler.bind(null,item.id)}      
                  />)
            }</ul>

      return(
            <Modal onClose={props.onClose}>
                  {cartItem}
                  <div className={styles.total}>
                        <span>Total Amount</span>
                        <span>{totalAmount}</span>
                  </div>
                  <div className={styles.actions}>
                        <button className={styles['button--alt']} onClick={props.onClose} >Close</button>
                        {cartCtx.items.length>0 &&   <button className={styles.button}>Order</button>}
                  </div>
            </Modal>
      );
};

export default Cart;
从“react”导入{useContext};
从“../../Store/Cart Context”导入CartContext;
从“/CartItem”导入CartItem;
从“/Cart.module.css”导入样式;
从“/Modal”导入模态;
常量车=(道具)=>{
const cartCtx=useContext(CartContext);
const totalAmount=`₹${cartCtx.totalAmount.toFixed(2)}`;
常量cartItemAddHandler=(项)=>{
};
常量cartItemRemoveHandler=(id)=>{
};
const cartItem=
    { cartCtx.items.map((item)=> ) }
返回( {cartItem} 总金额 {totalAmount} 接近 {cartCtx.items.length>0&&Order} ); }; 导出默认购物车;
我如何解决这个问题