reactjs 无法读取null的属性(阅读“type”)使用useState时出错

zlwx9yxi  于 2023-01-02  发布在  React
关注(0)|答案(2)|浏览(255)

我正在学习react,并尝试在暗模式更改为亮模式和亮模式更改为暗模式时显示alert msg。我尝试过此代码,但无法解决此错误。我提供了暗模式和亮模式的切换按钮,该按钮工作正常,但当我在useState(null)中使用null时,我在alert.js页面的第7行收到错误

Alert.js:7 
        
       Uncaught TypeError: Cannot read properties of null (reading 'type')
    at Alert (Alert.js:7:1)

这是我的App.Js页面
'

import './App.css';
import React, { useState } from 'react';
import About from './components/About';
import Navbar from './components/Navbar';
import TextForm from './components/TextForm';
import Alert from './components/Alert';

function App() {
  const [mode, setMode] = useState('light'); //to set initial mode to light
  const [alert, setAlert] = useState(null);

  const showAlert = (message, type) => {
    setAlert({
      message: message,
      type: type,
    })
  }

  const toggleMode = () => {
    if (mode === 'dark') {
      document.body.style.backgroundColor = '#fff';
      showAlert("Dark mode has been enabled", "success");
      setMode('light');
    } else {
      document.body.style.backgroundColor = '#06213d';
      showAlert("Light mode has been enabled", "success");
      setMode('dark')
    }

  }
  return (
    <>
      <Navbar title="Text Utils" mode={mode} toggleMode={toggleMode} />
      <Alert alert={alert} />
      <div className='container my-3'>
        <TextForm heading='Enter the text to analyze below' mode={mode} />
        <About mode={mode}></About>
      </div>
    </>
  );
}

export default App;

'这是我的Alert.js页面
'

import React from 'react'

function Alert(props) {
    return (
        <div>
             <div className="alert alert-warning alert-dismissible fade show" role="alert">
             props.alert && <strong>{props.alert.type}</strong>: {props.alert.msg}
                <button type="button" className="close" data-dismiss="alert" aria-label="Close">
                    <span aria-hidden="true">&times;</span>
                </button>
            </div>
        </div>
    )
}

export default Alert

'
我试过谷歌的解决方案,但不起作用。有没有办法解决这个问题。

cmssoen2

cmssoen21#

alert的初始状态为null,因此无法读取props.alert.type,阅读时可以使用optional chaining,也可以使用空值初始化状态。
props.alert?.type

const [alert, setAlert] = useState({
  message: null,
  type: null,
});
5gfr0r5j

5gfr0r5j2#

在Alert组件中传递对象警报,此组件包括字段类型和消息。您使用props.alert.msg,但对象警报没有字段msg。
试试props.alert.message。
而在App组件中定义状态告警时,最好将初始状态设置为对象

const [alert, setAlert] = useState({message: null, type: null}).

相关问题