hooks使用中的问题总结

本文探讨了在React中使用useState更新数组时页面不重新渲染的问题。通过实例展示了当直接修改数组并设置状态时,页面可能不会响应更新。提供了解决方案,即使用lodash的深拷贝方法来触发页面重新渲染。

其实用hooks已经半年多了,遇到了很多问题,每次解决完就忘记了,也没有记录,刚刚又遇到一个问题,总觉得以前见过,但就想不起来当时如何解决的,突然醒悟,还是要记录一下,以便以后查看。如果能帮助更多人就更好了。

tips: 我是慢慢的写的,因为也没啥时间专门写这个,就遇到问题了先快速记一下,后面有时间了再慢慢补充原理吧。
一步一步慢慢来吧。

UseState

1. 更改数组时,页面不重新渲染
  • 问题描述:声明了一个数组simpleRules, 数据结构如下, 页面中渲染这个simpleRules中的数据展示在页面,当我更改simpleRules数据时,正常页面应该跟着变化的。代码操作如下。但是页面却没有变化,但是在handle方法中打印出来的,simpleRules数据是被更改了的。
	const [simpleRules, setSimpleRules] = useState([
		{
			ruleId: 1,
			conditions: [
				{
					text: '条件1',
					id: '1'
				}
			]
		}
	]);

	const handleChangeConditions = useCallback(() => {
		simpleRules[0].conditions.push({text: '条件2', id: '2'});
		setSimpleRules(simpleRules);
	}, [simpleRules]);

先说解决方案:直接暴力深拷呗

	setSimpleRules(_.cloneDeep(simpleRules));
### 创建和使用自定义 Hooks 的方法 在 React 中,自定义 Hooks 提供了一种机制来提取组件中的逻辑,并使其能够在不同的组件之间共享。以下是关于如何创建和使用自定义 Hooks 的详细说明。 #### 定义自定义 Hook 要创建一个自定义 Hook,需遵循命名约定 `useXxx` 开头的函数名[^2]。此函数可以接收参数并返回状态或其他可被 React 组件消费的内容。例如: ```javascript import { useState, useEffect } from 'react'; function useFetchData(url) { const [data, setData] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { async function fetchData() { try { const response = await fetch(url); if (!response.ok) throw new Error('Network error'); const result = await response.json(); setData(result); } catch (err) { setError(err.message); } finally { setLoading(false); } } fetchData(); }, [url]); return { data, loading, error }; } ``` 上述代码展示了如何封装 API 调用逻辑到名为 `useFetchData` 的自定义 Hook 中[^1]。 #### 使用自定义 Hook 一旦定义好了一个自定义 Hook,在任何功能性组件中都可以像调用普通函数一样调用它。下面是一个简单的例子,演示了如何在一个组件里利用上面提到的 `useFetchData` Hook 来加载远程数据。 ```javascript function DataDisplayComponent({ url }) { const { data, loading, error } = useFetchData(url); if (loading) return <p>Loading...</p>; if (error) return <p>Error: {error}</p>; return ( <div> <h1>Data:</h1> <pre>{JSON.stringify(data, null, 2)}</pre> </div> ); } export default DataDisplayComponent; ``` 这里我们看到的是通过传递 URL 参数给我们的自定义 Hook 并基于其返回的结果渲染不同界面的过程。 --- ### 总结 自定义 Hooks 不仅能够帮助开发者更好地管理复杂的状态以及副作用逻辑,还能促进代码重用性和逻辑解耦。按照以上介绍的方式去构建自己的自定义 Hooks,则可以让应用程序变得更加模块化、易读且高效。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值