React work from Redux . TypeError: Cannot read property 'type' of undefined
React work from Redux . TypeError: Cannot read property 'type' of undefined
遇到这样的问题,我按照模板做了,但是出错了。可以在 GitHub
上找到带有文件的项目
TypeError: Cannot read property 'type' of undefined
DataReducer
D:/React_learn/Gitwooder/Wooder/wooder/src/Redux/DataReducer.js:20
17 |
18 | const DataReducer = (state = initialState , action) => {
19 |
> 20 | switch(action.type){
21 | case 'HIDE-MENU' :
22 | console.log('doschlo')
23 | return{
错误表明您的操作中没有类型 属性。
你应该像这样发送一个动作:dispatch({type: 'HIDE-MENU'})
如果它仍然不起作用,那么我希望你能分享你的堆栈跟踪,这样我们就能看到从哪里调度了操作
编辑:
您的 mapDispatchToProps 不正确。 mapDispatchToProps 中的每个 属性 应该是一个使用 react-redux 传递的调度的函数。请记住,映射的结果最终将附加到组件中的道具。我建议你重新阅读文档:https://react-redux.js.org/api/connect
正确的方法是:
import React from 'react';
import classes from './Header.module.css';
import { connect } from 'react-redux';
//***** CHANGE 1 *****
import { HidemenuAC } from '../../Redux/DataReducer';
const Header = (props) =>{
const Menu_view = () =>{
props.Hidemenu(true)
}
return <header className={classes.Header}>
<div className={classes.Header_menu} onClick={Menu_view}>
<div>
<div className={classes.line}></div>
<div className={classes.line}></div>
<div className={classes.line}></div>
</div>
<div className={classes.Header_menu_text} tabIndex="0">MENU</div>
</div>
<div className={classes.Big_line}></div>
<ul className={classes.HeaderUl}>
<li>HOME</li>
<li>PRODUCTS</li>
<li>ABOUT</li>
</ul>
<div className={classes.Header_circle} >i</div>
<div className={classes.Header_arrow}>EN ▼</div>
</header>
}
const mapStateToProps = (state) => {
return{
Menu:state.Data.Menu
}
}
//***** Change 2 ******
const mapDispatchToProps = (dispatch) => ({
Hidemenu: (value) => dispatch(HidemenuAC(value))
})
//***** Change 3 ******
export default connect(mapStateToProps, mapDispatchToProps)(Header);
遇到这样的问题,我按照模板做了,但是出错了。可以在 GitHub
上找到带有文件的项目TypeError: Cannot read property 'type' of undefined
DataReducer
D:/React_learn/Gitwooder/Wooder/wooder/src/Redux/DataReducer.js:20
17 |
18 | const DataReducer = (state = initialState , action) => {
19 |
> 20 | switch(action.type){
21 | case 'HIDE-MENU' :
22 | console.log('doschlo')
23 | return{
错误表明您的操作中没有类型 属性。
你应该像这样发送一个动作:dispatch({type: 'HIDE-MENU'})
如果它仍然不起作用,那么我希望你能分享你的堆栈跟踪,这样我们就能看到从哪里调度了操作
编辑:
您的 mapDispatchToProps 不正确。 mapDispatchToProps 中的每个 属性 应该是一个使用 react-redux 传递的调度的函数。请记住,映射的结果最终将附加到组件中的道具。我建议你重新阅读文档:https://react-redux.js.org/api/connect
正确的方法是:
import React from 'react';
import classes from './Header.module.css';
import { connect } from 'react-redux';
//***** CHANGE 1 *****
import { HidemenuAC } from '../../Redux/DataReducer';
const Header = (props) =>{
const Menu_view = () =>{
props.Hidemenu(true)
}
return <header className={classes.Header}>
<div className={classes.Header_menu} onClick={Menu_view}>
<div>
<div className={classes.line}></div>
<div className={classes.line}></div>
<div className={classes.line}></div>
</div>
<div className={classes.Header_menu_text} tabIndex="0">MENU</div>
</div>
<div className={classes.Big_line}></div>
<ul className={classes.HeaderUl}>
<li>HOME</li>
<li>PRODUCTS</li>
<li>ABOUT</li>
</ul>
<div className={classes.Header_circle} >i</div>
<div className={classes.Header_arrow}>EN ▼</div>
</header>
}
const mapStateToProps = (state) => {
return{
Menu:state.Data.Menu
}
}
//***** Change 2 ******
const mapDispatchToProps = (dispatch) => ({
Hidemenu: (value) => dispatch(HidemenuAC(value))
})
//***** Change 3 ******
export default connect(mapStateToProps, mapDispatchToProps)(Header);