Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ReactJs:TypeError:无法读取属性';长度';未定义的?_Javascript_Reactjs_Javascript Objects - Fatal编程技术网

Javascript ReactJs:TypeError:无法读取属性';长度';未定义的?

Javascript ReactJs:TypeError:无法读取属性';长度';未定义的?,javascript,reactjs,javascript-objects,Javascript,Reactjs,Javascript Objects,在这里,我试图建立一个餐厅网站。我已经建了一半了。但我在某一点上被卡住了。我犯了个错误。我无法从我的代码中找出错误。每当我尝试重新加载页面时,我都会收到TypeError:无法读取未定义的属性“length”?有时购物车没有定义。我试了很多次,但都犯了很多同样的错误。请有人检查一下好吗 这是App.js文件 import logo from './logo.svg'; import { BrowserRouter as Router, Switch, Route, Link }

在这里,我试图建立一个餐厅网站。我已经建了一半了。但我在某一点上被卡住了。我犯了个错误。我无法从我的代码中找出错误。每当我尝试重新加载页面时,我都会收到TypeError:无法读取未定义的属性“length”?有时购物车没有定义。我试了很多次,但都犯了很多同样的错误。请有人检查一下好吗

这是App.js文件

import logo from './logo.svg';
import {
  BrowserRouter as Router,
  Switch,
  Route,
  Link
} from "react-router-dom";
import './App.css';
import '../node_modules/bootstrap/dist/css/bootstrap.min.css'
import Banner from './components/Banner/Banner';
import Header from './components/Header/Header';
import Foods from './components/Foods/Foods';
import Features from './components/Features/Features';
import Footer from './components/Footer/Footer';
// import SIgnUp from './components/SignUp/SIgnUp';
import NotFound from './components/NotFound/NotFound';

import FoodItemDetails from './components/FoodItemDetails/FoodItemDetails'
import { createContext, useContext, useState } from 'react';
import Login from './components/Login/Login';


export const userContext = createContext();

function App() {

  const [cart , setCart] = useState([]);
  const [orderId , setOrderId] = useState(null);
  
  const [deliveryDetails , setDeliveryDetails] = useState({
    todoor:null,road:null, flat:null, businessname:null, address: null
  });

  const [userEmail, setUserEmail] = useState(null);
  const deliveryDetailsHandler = (data) => {
      setDeliveryDetails(data)
  }
  const getUserEmail = (email) => {
    setUserEmail(email);
  }

  const clearCart =  () => {
    const orderedItems = cart.map(cartItem => {
      return {food_id : cartItem.id, quantity: cartItem.quantity}
    })

    const orderDetailsData = { userEmail , orderedItems,  deliveryDetails }
    fetch('https://red-onion-backend.herokuapp.com/submitorder' , {
        method : "POST",
        headers: {
            "Content-type" : "application/json"
        },
        body : JSON.stringify(orderDetailsData)
    })
    .then(res => res.json())
    .then(data=> setOrderId(data._id))
    console.log(orderId);

    setCart([])
  }

  const cartHandler = (data) => {
    const alreadyAdded = cart.find(crt => crt.id == data.id );
    const newCart = [...cart,data]
    setCart(newCart);
    if(alreadyAdded){
      const reamingCarts = cart.filter(crt => cart.id != data);
      setCart(reamingCarts);
    }else{
      const newCart = [...cart,data]
      setCart(newCart);
    }
   
  }

  const checkOutItemHandler = (productId, productQuantity) => {
    const newCart = cart.map(item => {
      if(item.id == productId){
          item.quantity = productQuantity;
      }
      return item;
    })

    const filteredCart = newCart.filter(item => item.quantity > 0)
    setCart(filteredCart)
  }
 




  const [logggedInUser, setLoggedInUser] = useState({});
  const [signOutUser, setSignOutUser] = useState({});
  return (
    <userContext.Provider value={([logggedInUser, setLoggedInUser], [signOutUser, setSignOutUser])}>
         <Router>
    <div className="App">
    <Switch>
      <Route exact path="/">

      <Header></Header>
      <Banner></Banner>
      <Foods></Foods>
      <Features></Features>
      <Footer></Footer>
      </Route>
      <Route path="/user">
        <Login></Login>

      </Route>
      <Route path= "/food/:id">
        <Header cart={cart}></Header>
         
         
         {/* <FoodItemDetails cart={cart} cartHandler={cartHandler}></FoodItemDetails> */}
         <FoodItemDetails cart={cart} cartHandler={cartHandler}></FoodItemDetails>
         <Footer></Footer>

      </Route>
      <Route path ="*">
        <NotFound></NotFound>
      </Route>

    </Switch>
    </div>
    </Router>
     </userContext.Provider>
 
  );
}
import React, { useContext, useState } from 'react';
import logo from '../../Images/logo2.png';
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { faCartArrowDown } from '@fortawesome/free-solid-svg-icons';
import { faArrowRight } from '@fortawesome/free-solid-svg-icons';


import './Header.css'
import { Link, useHistory } from 'react-router-dom';
import { userContext } from '../../App';
const Header = (props) => {
    // const [cart, setCart] = useState([]);
    console.log(props, "tusar");
    const history = useHistory();
    const handleLoginRoute = () => {
        history.push("/user");
    };

    const [loggedInUser, setLoggedInUser] = useContext(userContext);
    return (
        <nav className="navbar navbar-expand navbar-light bg-white fixed-top">
            <div className="container">
                <div className="navbar-brand">

            <img src={logo} alt=""/>
                </div>
                <Link to="/checkout">
                <ul className="navbar-nav cart-icon">
                    <li className="nav-item"><FontAwesomeIcon className="cart-icon" icon={faCartArrowDown}><span className="badge bg-light">{ props.cart.length}</span></FontAwesomeIcon></li>
                    </ul>
                </Link>
                    {loggedInUser.isSignedIn ? 
                            <button className="btn btn-rounded btn-danger ">Sign out</button>
                         : 

                         <div className="main-btn">
                             <button className="btn  tg-primary login-btn" onClick={handleLoginRoute}>
                                Login
                            </button>
                             <button className="btn btn-rounded btn-danger sign-up-btn" onClick={handleLoginRoute}>Sign Up</button>

                            
                         </div>
                            
                        }

                        {loggedInUser.isSignedIn && (
                            <div className="user-icon">
                <FontAwesomeIcon icon={faArrowRight}></FontAwesomeIcon>
                                {loggedInUser.name ? loggedInUser.name.split(" ") : "User"}{" "}
                                
                            </div>
                        )} 
                
            </div>

        </nav>
    );
};

export default Header;
从“/logo.svg”导入徽标;
进口{
BrowserRouter作为路由器,
转换
路线,,
链接
}从“反应路由器dom”;
导入“/App.css”;
导入“../node_modules/bootstrap/dist/css/bootstrap.min.css”
从“./components/Banner/Banner”导入横幅;
从“./components/Header/Header”导入标题;
从“./组件/食品/食品”进口食品;
从“./components/Features/Features”导入要素;
从“./components/Footer/Footer”导入页脚;
//从“./components/SIgnUp/SIgnUp”导入注册;
从“./components/NotFound/NotFound”导入NotFound;
从“./components/FoodItemDetails/FoodItemDetails”导入FoodItemDetails
从“react”导入{createContext,useContext,useState};
从“./components/Login/Login”导入登录名;
export const userContext=createContext();
函数App(){
const[cart,setCart]=useState([]);
const[orderId,setOrderId]=useState(null);
const[deliveryDetails,setDeliveryDetails]=useState({
todoor:null、road:null、flat:null、businessname:null、address:null
});
const[userEmail,setUserEmail]=useState(null);
const deliveryDetailsHandler=(数据)=>{
setDeliveryDetails(数据)
}
const getUserEmail=(email)=>{
setUserEmail(电子邮件);
}
常量clearCart=()=>{
const orderedItems=cart.map(cartItem=>{
返回{food_id:cartItem.id,数量:cartItem.quantity}
})
const orderDetailsData={userEmail、orderedItems、deliveryDetails}
取('https://red-onion-backend.herokuapp.com/submitorder' , {
方法:“张贴”,
标题:{
“内容类型”:“应用程序/json”
},
正文:JSON.stringify(orderDetailsData)
})
.then(res=>res.json())
.then(data=>setOrderId(data.\u id))
log(orderId);
setCart([])
}
常量cartHandler=(数据)=>{
const alreadyAdded=cart.find(crt=>crt.id==data.id);
const newCart=[…购物车,数据]
setCart(newCart);
如果(已添加){
const reamingCarts=cart.filter(crt=>cart.id!=数据);
setCart(铰孔车);
}否则{
const newCart=[…购物车,数据]
setCart(newCart);
}
}
const checkOutItemHandler=(productId,productQuantity)=>{
const newCart=cart.map(项=>{
如果(item.id==productId){
item.quantity=产品数量;
}
退货项目;
})
常量filteredCart=newCart.filter(item=>item.quantity>0)
setCart(过滤部分)
}
const[logggedInUser,setLoggedInUser]=useState({});
const[signOutUser,setSignOutUser]=useState({});
返回(
{/*  */}
);
}
这里是Header.js文件

import logo from './logo.svg';
import {
  BrowserRouter as Router,
  Switch,
  Route,
  Link
} from "react-router-dom";
import './App.css';
import '../node_modules/bootstrap/dist/css/bootstrap.min.css'
import Banner from './components/Banner/Banner';
import Header from './components/Header/Header';
import Foods from './components/Foods/Foods';
import Features from './components/Features/Features';
import Footer from './components/Footer/Footer';
// import SIgnUp from './components/SignUp/SIgnUp';
import NotFound from './components/NotFound/NotFound';

import FoodItemDetails from './components/FoodItemDetails/FoodItemDetails'
import { createContext, useContext, useState } from 'react';
import Login from './components/Login/Login';


export const userContext = createContext();

function App() {

  const [cart , setCart] = useState([]);
  const [orderId , setOrderId] = useState(null);
  
  const [deliveryDetails , setDeliveryDetails] = useState({
    todoor:null,road:null, flat:null, businessname:null, address: null
  });

  const [userEmail, setUserEmail] = useState(null);
  const deliveryDetailsHandler = (data) => {
      setDeliveryDetails(data)
  }
  const getUserEmail = (email) => {
    setUserEmail(email);
  }

  const clearCart =  () => {
    const orderedItems = cart.map(cartItem => {
      return {food_id : cartItem.id, quantity: cartItem.quantity}
    })

    const orderDetailsData = { userEmail , orderedItems,  deliveryDetails }
    fetch('https://red-onion-backend.herokuapp.com/submitorder' , {
        method : "POST",
        headers: {
            "Content-type" : "application/json"
        },
        body : JSON.stringify(orderDetailsData)
    })
    .then(res => res.json())
    .then(data=> setOrderId(data._id))
    console.log(orderId);

    setCart([])
  }

  const cartHandler = (data) => {
    const alreadyAdded = cart.find(crt => crt.id == data.id );
    const newCart = [...cart,data]
    setCart(newCart);
    if(alreadyAdded){
      const reamingCarts = cart.filter(crt => cart.id != data);
      setCart(reamingCarts);
    }else{
      const newCart = [...cart,data]
      setCart(newCart);
    }
   
  }

  const checkOutItemHandler = (productId, productQuantity) => {
    const newCart = cart.map(item => {
      if(item.id == productId){
          item.quantity = productQuantity;
      }
      return item;
    })

    const filteredCart = newCart.filter(item => item.quantity > 0)
    setCart(filteredCart)
  }
 




  const [logggedInUser, setLoggedInUser] = useState({});
  const [signOutUser, setSignOutUser] = useState({});
  return (
    <userContext.Provider value={([logggedInUser, setLoggedInUser], [signOutUser, setSignOutUser])}>
         <Router>
    <div className="App">
    <Switch>
      <Route exact path="/">

      <Header></Header>
      <Banner></Banner>
      <Foods></Foods>
      <Features></Features>
      <Footer></Footer>
      </Route>
      <Route path="/user">
        <Login></Login>

      </Route>
      <Route path= "/food/:id">
        <Header cart={cart}></Header>
         
         
         {/* <FoodItemDetails cart={cart} cartHandler={cartHandler}></FoodItemDetails> */}
         <FoodItemDetails cart={cart} cartHandler={cartHandler}></FoodItemDetails>
         <Footer></Footer>

      </Route>
      <Route path ="*">
        <NotFound></NotFound>
      </Route>

    </Switch>
    </div>
    </Router>
     </userContext.Provider>
 
  );
}
import React, { useContext, useState } from 'react';
import logo from '../../Images/logo2.png';
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { faCartArrowDown } from '@fortawesome/free-solid-svg-icons';
import { faArrowRight } from '@fortawesome/free-solid-svg-icons';


import './Header.css'
import { Link, useHistory } from 'react-router-dom';
import { userContext } from '../../App';
const Header = (props) => {
    // const [cart, setCart] = useState([]);
    console.log(props, "tusar");
    const history = useHistory();
    const handleLoginRoute = () => {
        history.push("/user");
    };

    const [loggedInUser, setLoggedInUser] = useContext(userContext);
    return (
        <nav className="navbar navbar-expand navbar-light bg-white fixed-top">
            <div className="container">
                <div className="navbar-brand">

            <img src={logo} alt=""/>
                </div>
                <Link to="/checkout">
                <ul className="navbar-nav cart-icon">
                    <li className="nav-item"><FontAwesomeIcon className="cart-icon" icon={faCartArrowDown}><span className="badge bg-light">{ props.cart.length}</span></FontAwesomeIcon></li>
                    </ul>
                </Link>
                    {loggedInUser.isSignedIn ? 
                            <button className="btn btn-rounded btn-danger ">Sign out</button>
                         : 

                         <div className="main-btn">
                             <button className="btn  tg-primary login-btn" onClick={handleLoginRoute}>
                                Login
                            </button>
                             <button className="btn btn-rounded btn-danger sign-up-btn" onClick={handleLoginRoute}>Sign Up</button>

                            
                         </div>
                            
                        }

                        {loggedInUser.isSignedIn && (
                            <div className="user-icon">
                <FontAwesomeIcon icon={faArrowRight}></FontAwesomeIcon>
                                {loggedInUser.name ? loggedInUser.name.split(" ") : "User"}{" "}
                                
                            </div>
                        )} 
                
            </div>

        </nav>
    );
};

export default Header;
import React,{useContext,useState}来自“React”;
从“../../Images/logo2.png”导入徽标;
从“@fortawesome/react fontawesome”导入{FontAwesomeIcon}”;
从“@fortawesome/free solid svg icons”导入{faCartArrowDown};
从“@fortawesome/free solid svg icons”导入{faArrowRight};
导入“./Header.css”
从“react router dom”导入{Link,useHistory};
从“../../App”导入{userContext};
常数头=(道具)=>{
//const[cart,setCart]=useState([]);
控制台日志(道具,“tusar”);
const history=useHistory();
常量handleLoginRoute=()=>{
history.push(“/user”);
};
const[loggedInUser,setLoggedInUser]=useContext(userContext);
返回(
  • {props.cart.length}
{loggedInUser.isSignedIn? 退出 : 登录 注册 } {loggedInUser.isSignedIn&&( {loggedInUser.name?loggedInUser.name.split(“”:“用户”}{“}” )} ); }; 导出默认标题;
@Andy It表示购物车未定义您未将任何道具传递到
标题中,这正是您的代码所期望的。问题已解决,但每当我单击添加的按钮时,我都会在console.log中将其签出,但它不会显示在网站标题中。问题已解决。。谢谢