Ошибка: Недопустимый тип элемента: ожидается строка (для встроенных компонентов) или класс/функция (для составных компонентов), но получено: объект. Вы, вероятно,

#reactjs #react-redux

Вопрос:

Я пытался скомпилировать это, но в браузере появилась ошибка. Помогите мне решить эту проблему.

это ошибка, отображаемая в браузере при компиляции:

Ошибка: Недопустимый тип элемента: ожидается строка (для встроенных компонентов) или класс/функция (для составных компонентов), но получено: объект. Скорее всего, вы забыли экспортировать свой компонент из файла, в котором он определен, или вы, возможно, перепутали импорт по умолчанию и именованный импорт.

Проверьте метод визуализации App .

 Check the render method of `App`.
▶ 21 stack frames were collapsed.
Module.<anonymous>
D:/Bug-Tracker/frontend/src/index.js:25
  22 |   reducer
  23 | })
  24 | 
> 25 | ReactDOM.render( 
  26 |   <Provider store ={store}>
  27 |   <App />
  28 |   </Provider>
 

Вот файл входа в систему react, который я создал

 // eslint-disable-next-line no-unused-vars
import React, {useState} from 'react'
import {useDispatch} from 'react-redux'
import {signIn} from '../../../Controllers/Redux/authSlice'


// eslint-disable-next-line import/no-anonymous-default-export
export default () => {
    const dispatch = useDispatch();

    const [formInput, setFormInput] = useState({
        name:"",
        password:"",
    }) 

    function inputChanged(e){
        setFormInput({
            ...formInput,
            [e.target.name]:e.target.value
        })
    }
    function submit(e){
        dispatch(signIn(formInput));
        e.preventDefault();
    }


    return(
        <div className = "loginBG">
            <form className = 'login-panel'>
                <h1>Login:</h1>
                <input name ='name' placeholder = 'Name' onChange={inputChanged} value = {formInput.name}></input>
                <input name='password' type='password' placeholder ='Password' onChange={inputChanged} value ={formInput.password}></input>
                <button type="submit" onClick={submit}>Login</button>
            </form>
        </div>
    )
}
 

Это тот самый App.js файл, который я создал

 /* eslint-disable no-unused-vars */
import React from 'react';
import { useSelector } from 'react-redux'
import Login from './Views/Pages/Login/login'
import {BrowserRouter as Router, Switch, Route } from 'react-router-dom'
import Sidebar from './Views/Sidebar/sidebar'
import Dashboard from './Views/Pages/Dashboard/dashboard'
import ViewBugPage from './Views/Pages/viewBugs'
import CreateBug from './Views/Components/Bug Create/bugForm'


function App() {
  const {auth} = useSelector(state => state)
  return (
    <Router>
    {
    !auth.LoggedIn ? <Login />:
    <>

    <Sidebar />
    <Switch>
      <Route path ="/" exact ><Dashboard /></Route>
      <Route path ="/viewBugs"><ViewBugPage /></Route>
      
      <Router path="/create"> 
      <div classname='page-container'><CreateBug title='Create Bug' /></div> </Router> 
    </Switch>
    </>
    }
    </Router>
  );
}

export default App;
 

And this is the Authentication file for login

 import {createSlice} from '@reduxjs/toolkit'

const slice = createSlice({
    name:"auth",
    initialState:{
        admin:false,
        LoggedIn:false,
    },
    reducers:{
        signIn:(state,action) => {
            // eslint-disable-next-line no-unused-vars
            const {name,password} = action.payload;
            state.LoggedIn = true;
            state.admin = true;
        },
        signOut:(state) => {
            state.LoggedIn = false;
            state.admin = false;
        },
        signUp:(state,action) => {
            // eslint-disable-next-line no-unused-vars
            const {name,email,password} = action.payload;
            state.LoggedIn = true;
            state.admin = true;
        },
        
    }
})

export default slice.reducer;

export const {signIn,signOut,signUp} = slice.actions;