【发布时间】:2020-01-10 14:01:13
【问题描述】:
我必须为我的切换按钮使用 useDispatch(),所以我必须将它们从反应到 redux 状态。我正在关注 Redux 基础教程,我认为我已经正确地做到了,但是当我尝试至少使用选择器来显示 redux 按钮的状态时,它没有显示任何内容。
这是我的代码:
//actions 文件夹中的 types.js
export const TOGGLE = "TOGGLE";
//actions文件夹中的buttonActions
export const toggle = () => {
return {
type: 'TOGGLE'
};
};
// reducers 文件夹中的 buttonReducer
const buttonReducer = (state = true, action) => {
switch(action.type) {
case 'TOGGLE':
return !state;
default:
return state;
};
};
export default buttonReducer;
并且 buttonReducer 被导入到 combineReducer 中去存储。
组件代码:
import React, { useState, useEffect } from 'react'
import isloff from './mainpage_imgs/isloff.png'
import islon from './mainpage_imgs/islon.png'
import PropTypes from "prop-types";
import { connect, useDispatch, useSelector } from "react-redux";
import { toggle } from '../../actions/buttonActions'
const Islbutton = props => {
const [open, setOpen] = useState(true);
const [role, setRole] = useState('');
useEffect(() => {
if (props.auth.user)
{
setRole(props.auth.user.role);
}
}, []);
const test = useSelector(state => state.button);
const checkRole = (role) => {
if (role === 'Menager' || role === 'Technolog')
{
return true }
else
{
return false
};
}
const toggleImage = () => {
if(checkRole(role)) {
setOpen(!open)
};
}
const getImageName = () => open ? 'islOnn' : 'islOfff'
const dispatch = useDispatch();
return(
<div>
<img style={islplace} src={open ? islon : isloff }
onClick={()=> dispatch(toggle())} />
</div>
);
}
Islbutton.propTypes = {
button: PropTypes.func.isRequired,
auth: PropTypes.obj.isRequired
};
const mapStateToProps = state => ({
button: state.button,
auth: state.auth
});
export default connect(mapStateToProps, {}), (Islbutton);
【问题讨论】:
-
这与主要问题有关,因为代码不起作用。当然,我可以向您展示 onClick = { () => useDispatch(toggle) } 及其结果“未定义切换/不是函数”,但如果不显示我所做的代码,它就毫无价值,对吧?
-
好吧,那我的错。马上修改
-
感谢您的建议,我会遵循它们,因为它会帮助我改进,但现在它适用于 dispatch(toggle())。我有一个问题要问你,因为发生了一些意想不到的事情。它现在改变了所有按钮的状态。在 React 中,它只适用于一个,每个都有自己的按钮。现在,无论我点击哪一个,它都会改变所有这些的状态。有没有办法为一个按钮制作一个状态并继续?我有 16 个相同的按钮
-
关于
dispatch(toggle()),你是对的(我太兴奋了;)。关于您以后的问题,我不太了解您的应用程序的全貌:这些按钮状态是否取决于其他一些全局状态变量?你甚至需要全局存储这些按钮状态吗?但是,到目前为止,我已经在the answer 中总结了我的建议。如果它完全解决了您的问题,欢迎您投票/接受;)或在该评论部分下的评论部分继续提出进一步的问题。 -
好的,非常感谢您的回答和建议!
标签: javascript function redux react-redux