javascript – 是否存在使用React hooks和Typescript定义状态的“正确”方法?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 是否存在使用React hooks和Typescript定义状态的“正确”方法?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2226字,纯文字阅读大概需要4分钟。
内容图文
![javascript – 是否存在使用React hooks和Typescript定义状态的“正确”方法?](/upload/InfoBanner/zyjiaocheng/812/d8cf42ccc861442ea806f7d11e19fe77.jpg)
我已经和React工作了一段时间,昨天我在基于Typescript的项目中弄到了钩子.在重构之前,该类有一个这样的状态:
interface INavItemProps {
route: IRoute;
}
interface INavItemState {
toggleStateOpen: boolean
}
class NavItem extends Component<INavItemProps, INavItemState> {
constructor() {
this.state = { toggleStateOpen: false };
}
public handleClick = (element: React.MouseEvent<HTMLElement>) => {
const toggleState = !this.state.toggleStateOpen;
this.setState({ toggleStateOpen: toggleState });
};
...
}
现在,在重构功能组件时,我开始讨论这个问题
interface INavItemProps {
route: IRoute;
}
const NavItem: React.FunctionComponent<INavItemProps> = props => {
const [toggleState, setToggleState] = useState<boolean>(false);
const { route } = props;
const handleClick = (element: React.MouseEvent<HTMLElement>) => {
const newState = !toggleState;
setToggleState(newState);
};
...
}
但后来我也对此进行了测试:
interface INavItemProps {
route: IRoute;
}
interface INavItemState {
toggleStateOpen: boolean
}
const NavItem: React.FunctionComponent<INavItemProps> = props => {
const [state, setToggleState] = useState<INavItemState>({toggleStateOpen: false});
const { route } = props;
const handleClick = (element: React.MouseEvent<HTMLElement>) => {
const newState = !state.toggleStateOpen;
setToggleState({toggleStateOpen: newState});
};
...
}
在这样的情况下,是否存在定义状态的正确方法?或者我应该只是为州的每个片段调用更多的钩子?
解决方法:
useState钩子允许你定义任何类型的状态,比如Object,Array,Number,String,Boolean等.你需要知道的是钩子更新器不会在它自己的unline setState上合并状态,所以如果你维护的话一个数组或一个对象,你只传递要更新的值到更新程序,它实际上会导致你的其他状态迷路.
通常情况下,最好使用多个钩子而不是使用带有一个useState钩子的对象,或者如果你想要,你可以编写自己的自定义钩子来合并像这样的值
const useMergerHook = (init) => {
const [state, setState] = useState(init);
const updater = (newState) => {
if (Array.isArray(init)) {
setState(prv => ([
...prv,
...newState
]))
} else if(typeof init === 'object' && init !== null) {
setState(prv => ({
...prv,
...newState
}))
} else {
setState(newState);
}
}
return [state, updater];
}
或者如果状态/状态更新需要更复杂并且处理程序需要传递给组件,我建议使用useReducer钩子,因为您有多个逻辑来更新状态并且可以使用复杂状态,如嵌套对象和写入有选择地更新逻辑
内容总结
以上是互联网集市为您收集整理的javascript – 是否存在使用React hooks和Typescript定义状态的“正确”方法?全部内容,希望文章能够帮你解决javascript – 是否存在使用React hooks和Typescript定义状态的“正确”方法?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。