DEV Community

Amrita Singh
Amrita Singh

Posted on

What this error means '_id is not defined'

Please anybody can solve the issue. × TypeError: Cannot read property '_id' of null ,why this error is coming.This is my full code of reactjs and finding this error when I am logging out of the screen.Please anybody can solve this error. This program is of navigation bar where I have used the search method as well.

import React,{useContext,useRef,useEffect,useState} from 'react'
import {Link ,useHistory} from 'react-router-dom'
import {UserContext} from '../App'
import styled from 'styled-components'
import {GrClose} from 'react-icons/gr';
import {CgProfile} from 'react-icons/cg';
import {FiCamera} from 'react-icons/fi';
import {BiHomeAlt} from 'react-icons/bi'
import M from 'materialize-css'
import ScrollToTop from './screens/ScrollToTop/index'
import '../App.css'
import GoToTop from './screens/ScrollToTop';
const StyledButton = styled.button`
    font-size: 1.7rem;
`
const StyledIcon = styled.div`
    font-size: 1.5rem;
    margin-left: -10px;
    margin-top: 2px;
    @media only screen and (max-width: 800px) {
       margin-left: -15px;
    }
`
const StyledIcon1 = styled.div`
    font-size: 1.5rem;
    margin-left: -35px;
    margin-top: 2px;
`
const Navbar = () => {
  const  searchModal = useRef(null)
  const [search,setSearch] = useState('')
  const [userDetails,setUserDetails] = useState([])
  const {state,dispatch} = useContext(UserContext)
  const history = useHistory()
  useEffect(()=>{
    M.Modal.init(searchModal.current)
},[])
  const renderList = ()=>{
    if(state){
      return [
        <li key="1"><StyledIcon1><i data-target="modal1" className="large material-icons modal-trigger" style={{color:"black"}}>search</i></StyledIcon1></li>,
        <li key="2"><Link to={state?"/":"/signin"}><StyledIcon><BiHomeAlt /></StyledIcon></Link></li>,
        <li key="3"><Link to="/profile"><StyledIcon><CgProfile /></StyledIcon></Link></li>,
        <li key="4"><Link to="/create"><StyledIcon><FiCamera /></StyledIcon></Link></li>,
        <li  key="5">
        <button className="btn #c62828 red darken-3 ok"
        onClick={()=>{
          localStorage.clear()
          dispatch({type:"CLEAR"})
          history.push('/signin')
          M.toast({html: "Logged out successfully",classes:"#43a047 green darken-1"})
        }}
        >
            Logout
        </button>
        </li>
      ]
  }
  else{
    return [
      <li  key="6"><Link to="/signin">SignIn</Link></li>,
      <li  key="7"><Link to="/signup">SignUp</Link></li>
    ]
  }
}
const fetchUsers = (query)=>{
  setSearch(query)
  fetch('/search-users',{
    method:"post",
    headers:{
      "Content-Type":"application/json"
    },
    body:JSON.stringify({
      query
    })
  }).then(res=>res.json())
  .then(results=>{
    setUserDetails(results.user)
  })
}
    return (
        <nav className="navbar">
        <div className="nav-wrapper white">
          <Link to={state?"/":"/signin"} className="brand-logo left">Instagram</Link>
          <ul id="nav-mobile" className="right">
            { renderList() }
          </ul>
          </div>
          <div id="modal1" className="modal style-width" ref={searchModal} style={{color:"black"}}>
          <div className="modal-footer">
          <StyledButton className="modal-close waves-effect waves-white btn-flat right" onClick={()=>setSearch('')}><GrClose /></StyledButton>
          </div>
          <div className="modal-content">
          <input
            type="text"
            placeholder="Search users"
            value={search}
            onChange={(e)=>fetchUsers(e.target.value)}
            />
           {
               userDetails && userDetails.length>0
               ?
                <ul className="collection">
             {userDetails.map(item=>{
              return (
                 <Link to={item._id !== state._id ? "/profile/"+item._id:'/profile'} onClick={()=>{
                  M.Modal.getInstance(searchModal.current).close()
                  setSearch('')
                }}><li className="collection-item">
                <img className="search-image" src={item.pic} alt={item._id}/>
                <span className="search-name">{item.username}</span>
                <span className="search-email">{item.email}</span>
                {/* <span className="search-name">{item.name}</span> */}
                </li></Link> 
              ) 
            })}
              </ul> : <ul>No result found</ul>
           } 
          </div>
        </div>
        <ScrollToTop />
        <GoToTop />
      </nav>
    )
}

export default Navbar
Enter fullscreen mode Exit fullscreen mode

error

Top comments (1)

Collapse
 
jozsefsallai profile image
József Sallai

Try setting breakpoints and debugging your code, see what values you have when the mapping happens.

Just by looking at the code, this can either be because one of your items in userDetails is null or your state is null.