我正在尝试找出一起使用 React、Redux 和 TypeScript 时如何减少样板文件的数量。在这种情况下你可能不能,但想看看是否有人有想法。
我目前有一个组件,它调度一个切换菜单的操作,在显示和隐藏菜单之间交替。为此,我定义了我的类,如下所示(省略与状态相关的代码,重点关注操作的调度):
import {Action, toggleMenu} from "../../actions/index";
interface IConnectedDispatch {
toggleMenu: (isActive: boolean) => Action;
}
class HeaderMenu extends React.Component<IOwnProps & IConnectedState & IConnectedDispatch, any> {
constructor(props: IOwnProps & IConnectedState & IConnectedDispatch) {
super(props);
this.toggleMenuState = this.toggleMenuState.bind(this);
}
public render() {
return (
<button className={buttonClass} onClick={this.props.toggleMenu(this.props.isActive)} type="button">
</button>
);
}
}
const mapDispatchToProps = (dispatch: redux.Dispatch<Store.All>): IConnectedDispatch => ({
toggleMenu: (isActive: boolean) => dispatch(toggleMenu(isActive))});
该动作定义为
export function toggleMenu(isActive: boolean): Dispatch<Action> {
return (dispatch: Dispatch<Action>) => {
dispatch({
isActive,
type: "TOGGLE_MENU",
});
};
}
感觉应该可以减少实现我的目标所需的代码量。作为 React、Redux 和 TypeScript 的新手,我无法确切地了解如何做到这一点。具体来说,一遍又一遍地写动作名称、toggleMenu,感觉非常重复。例如本部分两次:
const mapDispatchToProps = (dispatch: redux.Dispatch<Store.All>): IConnectedDispatch => ({
toggleMenu: (isActive: boolean) => dispatch(toggleMenu(isActive))});
任何建议表示赞赏!
有一个更短的方法。您可以简化很多代码。
动作 - 原创
export function toggleMenu(isActive: boolean): Dispatch<Action> {
return (dispatch: Dispatch<Action>) => {
dispatch({
isActive,
type: "TOGGLE_MENU",
});
};
}
行动 - 减少
export const toggleMenu = (isActive: boolean) => ({
isActive,
type: "TOGGLE_MENU"
})
属性界面 - 原始
interface IConnectedDispatch {
toggleMenu: (isActive: boolean) => Action;
}
属性接口 - 简化
import { toggleMenu } from "./actions"
interface IConnectedDispatch {
toggleMenu: typeof toggleMenu
}
MapDispatch - 原始
const mapDispatchToProps = (dispatch: redux.Dispatch<Store.All>): IConnectedDispatch => ({
toggleMenu: (isActive: boolean) => dispatch(toggleMenu(isActive))});
MapDispatch - 减少
const mapDispatchToProps = {
toggleMenu
};
我可以推荐这个图书馆typescript-fsa https://github.com/aikoven/typescript-fsa。它有助于减少由操作(尤其是异步操作)创建的大量样板。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)