在本文中,您将会了解到关于参数'data'隐式有一个'any'类型ts(7006)Reacthooks的新资讯,同时我们还将为您解释参数隐式具有any类型的相关在本文中,我们将带你探索参数'data'
在本文中,您将会了解到关于参数 'data' 隐式有一个 'any' 类型 ts(7006) React hooks的新资讯,同时我们还将为您解释参数隐式具有any类型的相关在本文中,我们将带你探索参数 'data' 隐式有一个 'any' 类型 ts(7006) React hooks的奥秘,分析参数隐式具有any类型的特点,并给出一些关于ahooks —— 高质量可靠的 React Hooks 库、ahooks正式发布React Hooks工具库、Day 38/100 React Hook之useState基本用法、Day 45/100 React Hooks 用法小结的实用技巧。
本文目录一览:- 参数 'data' 隐式有一个 'any' 类型 ts(7006) React hooks(参数隐式具有any类型)
- ahooks —— 高质量可靠的 React Hooks 库
- ahooks正式发布React Hooks工具库
- Day 38/100 React Hook之useState基本用法
- Day 45/100 React Hooks 用法小结
参数 'data' 隐式有一个 'any' 类型 ts(7006) React hooks(参数隐式具有any类型)
如何解决参数 ''data'' 隐式有一个 ''any'' 类型 ts(7006) React hooks?
我真的不明白“数据”是如何用 7006 错误加下划线的,但在 React Hooks 的首页 (https://react-hook-form.com/get-started#Quickstart) 的测试环境中,它确实有效。
我是否缺少依赖项或需要另一个文件或导入某些内容?
我在另一个区域也遇到了这个问题。
import React from "react";
import ReactDOM from "react-dom";
import { useForm } from "react-hook-form";
import "./styles.css";
function App() {
const { register,handleSubmit,watch,errors } = useForm();
const onSubmit = data => {
console.log(data);
}; // your form submit function which will invoke after successful validation
console.log(watch("example")); // you can watch individual input by pass the name of the input
return (
<form onSubmit={handleSubmit(onSubmit)}>
<label>Example</label>
<input name="example" defaultValue="test" ref={register} />
<label>Examplerequired</label>
<input
name="examplerequired"
ref={register({ required: true,maxLength: 10 })}
/>
{errors.examplerequired && <p>This field is required</p>}
<input type="submit" />
</form>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />,rootElement);
export default App;
解决方法
尽管代码有效,但 TS 会警告您它无法从您的代码推断出 data
的类型,因此它会回退到隐式 any
。您需要手动设置data
的类型,或者在TS可以从中推断出data
类型的地方设置一个类型。
在这种情况下,您需要在调用 useForm()
时传递表单数据的定义(请参阅 documentation)。您还需要用 onSubmit
包裹 handleSubmit
。工作示例 - sandbox。
type FormData = {
example: string;
exampleRequired: string;
};
function App() {
const { register,handleSubmit,watch,errors } = useForm<FormData>();
const onSubmit = handleSubmit(data => {
console.log(data);
});
并使用 onSubmit
:
<form onSubmit={onSubmit}>
,
这是 TypeScript 错误,而不是运行时错误。这表示您定义了一个函数 (onSubmit
),其参数 (data
) 未指定类型。
结合 here 和 here 中的 TypeScript 示例,您应该这样做:
import React from "react";
import { useForm,SubmitHandler } from "react-hook-form";
// -------------^^^^^^^^^^^^^^^
import ReactDOM from "react-dom";
import "./styles.css";
type Inputs = {
example: string,exampleRequired: string,};
function App() {
const { register,errors } = useForm<Inputs>();
const onSubmit: SubmitHandler<Inputs> = data => {
// -----------^^^^^^^^^^^^^^^^^^^^^^^
console.log(data);
};
...
ahooks —— 高质量可靠的 React Hooks 库
ahooks,发音 [eɪ hʊks],是一套高质量可靠的 React Hooks 库。在当前 React 项目研发过程中,一套好用的 React Hooks 库是必不可少的
ahooks正式发布React Hooks工具库
起因
从 React Hooks 正式发布到现在,越来越多的项目正在使用 Function Component 替代 Class Component,Hooks 这一新特性也逐渐被广泛的使用。
然而在实践的过程中,我们发现在很多常见的场景下,大部分逻辑是重复且可被复用的,如对数据请求的逻辑处理,对防抖节流的逻辑处理等,同样的代码经常会在同一个或不同的项目中被重复的编写 。
另一方面,由于 Hooks 虽然解决了 Class 组件的 this 、 LifeCycle 等学习成本过高的问题,但是也引入了诸如闭包、依赖地狱、不能在条件语句中使用的约定等等新的问题,导致对 Hooks 新手而言并不友好,经常会遇到 Hooks 的各种奇怪问题而摸不着头脑 。
解法
要解决上面的问题,让我们回到 React Hooks 本身,相比 Class 而言 Hooks 到底给我们带来了哪些优势,怎么利用这些优势来提升生产效率。对比而言,React Hooks 的主要特性之一就是可以在组件之间共享可复用的状态逻辑,方便了开发者将业务逻辑和 UI 视图进行解耦,从而状态与 UI 的界限会越来越清晰,顺着这个思路,我们是否有机会将与业务无关的逻辑进行抽象,封装一套通用场景的纯逻辑的 Hooks 工具方法,答案是肯定的,我们称之为 ice/hooks,其讨论过程详见 [RFC] 通用场景的 Hooks 方案,这便也是 ahooks 的由来。
ice/hooks:面向中后台业务场景的 Hooks 方案。
那么好奇的你肯定会问, ice/hooks 与标题的 ahooks 的关系是什么? 待我细细道来
在 ice/hooks RFC 期间,我们也对比参考了社区的同类方案诸如 react-use 等,但最终因为 react-use 提供的 Hooks 过于冗余(已经超过 100+),大部分在实际业务中可能使用不到,以及它在一年时间内大版本已经变更到 v15 的原因等最终放弃选,最终确定 ice/hooks 中提供的 Hooks 一方面是基于 react-use 的基础部分,另一方面更多的是贴合业务的,由业务中进行提炼出来的 Hooks 进行组合的方案。
正当方案确定准备开发时,在 ice/hooks RFC 评论区收到来自蚂蚁 umi 团队 #尽龙 的回复,希望可以共建维护一套阿里集团通用的 Hooks 方案,经过几轮讨论下来为避免重复建设,以及共同诉求的前提下,与蚂蚁 umi 团队,阿里体育团队达成共建 React Hooks 工具库的目标,这便是 ahooks 工具库品牌的由来。
ahooks:基于 React Hooks 的工具库,致力提供常用且高质量的 Hooks。
共建
通过近 2 个月的共建,ahooks 已正式发布 v1.0 版本 ✊ ✊ ✊。
项目目标
ahooks 定位于一套基于 React Hooks 的工具库,核心围绕 React Hooks 的逻辑封装能力,降低代码复杂度和避免团队的重复建设为背景,共同建设和维护阿里经济体层面的 React Hooks 库,使之成为和 antd/fusion 组件库一样的基础设施能力,帮助开发者在逻辑层面省去大量的重复工作。
品牌升级
在共建之前由于 umi 团队已经有了一定的 Hooks 沉淀,因此主要基于已有的能力进行整合和迭代,对特殊依赖的 Hooks 进行规范化,并将品牌升级为 ahooks。
社区开源
由于品牌升级和出于共建的考虑,ahooks 代码也已提交了开源流程申请并已经通过审批,源代码维护在 Alibaba Group 下。详见 alibaba/hooks
API 规范
ahooks 基于 UI、SideEffect、LifeCycle、State、DOM 等分类提供了常用的 Hooks,如下图所示。并对每一类接口的 API 进行了规范化,如规范入参结构、返回值结构等,保证 API 层面的简洁和一致性。
示例演示
- 用于管理异步数据请求的 Hook。
import { useRequest } from ''ahooks''; // 输出值为多 value 类型的,结构为 {...values} const { data, error, loading, ...rest } = useRequest<R>( service: string | object | ((...args:any) => string | object), { ..., requestMethod?: (service) => Promise })
- 用于管理 boolean 值的 Hook。
import { useBoolean } from ''ahooks''; // 输出值为单 value 与多 actions 类型的,结构为 [value, actions] const [ state, { toggle, setTrue, setFalse }] = useBoolean( defaultValue?: boolean, );
- 用于将状态持久化存储在 localStorage 中的 Hook。
import { useLocalStorageState } from ''ahooks''; // 输出值为 value 和 setValue 类型的,结构为 [value, setValue] const [state, setState] = useLocalStorageState<T>( key: string, defaultValue?: T | (() => T), ): [T?, (value?: T | ((previousState: T) => T)) => void]
更多示例详见 ahooks 官网:
https://ahooks.js.org/zh-CN/hooks/async
开发迭代
在开源项目中如何保障 ahooks 的正常开发迭代是首先需要达成一致共识的,因此我们也制定了相应的维护机制,即将现有的 Hooks 按照分类指派到每个人,被指派的人需要负责该分类下的新增、 日常维护、 Review 和疑难问题的解决。以及建立周报和周会机制,每两周聚焦一次当下的进度和问题,以此确保开源项目正常的开发迭代。
- 如果你对 ahooks 感兴趣
- 如果你需要的 Hooks 我们还没有提供
- 如果你的业务场景里有自定义的 Hooks 可沉淀到 ahooks
下一步
随着 ahooks 正式版本的发布,开源的主体工作基本已完成,但目前更多追求的是功能的完成,接下来一方面我们会基于各自的业务场景继续不断的完善和沉淀更多通用的 Hooks,简化逻辑层面大量的重复工作,以此降低代码复杂度和提升开发效率;另外一方面也在计划编写基于 React Hooks 的系列教程,帮助 Hooks 新手更好的理解和使用 React Hooks。
相关链接
- https://ahooks.js.org/
- https://github.com/alibaba/hooks
- https://github.com/alibaba/ice
以上就是ahooks正式发布React Hooks工具库的详细内容,更多关于React Hooks工具库的资料请关注其它相关文章!
- ahooks useVirtualList 封装虚拟滚动列表
- ahooks封装cookie localStorage sessionStorage方法
- ahooks控制时机的hook实现方法
- ahooks解决用户多次提交方法示例
- ahooks解决React闭包问题方法示例
- ahooks useRequest源码精读解析
- ahooks整体架构及React工具库源码解读
- ahooks useInfiniteScroll源码解析
Day 38/100 React Hook之useState基本用法
(一)需求
最近在学习React,学到了React Hook 做了useState Demo。
(二)介绍
1、默认值是数字类型
const [num, setNum] = useState(0);
const clickX = () => {
setNum(num + 1);
}
<p>
1、初始化为数字:{num}
</p>
<Button onClick={clickX}>
Click Number
</Button>
2、默认值是对象类型
初始化为对象是用结构复制的形式
const [obj, setObj] = useState({ a: 1 });
const clickObj = () => {
setNum(num + 1);
setObj({ ...obj, b: num + 1 });
}
<p>
2、初始化为对象: a-{obj.a} ;b-{obj.b}
</p>
<Button onClick={clickObj}>
Click Object
</Button>
(三)完成Demo
/*
* @Author: ArdenZhao
* @Date: 2022-04-14 16:46:18
* @LastEditTime: 2022-04-14 17:06:55
* @FilePath: /react-ts/src/components/react/7-Hook-useState.js
* @Description: file information
*/
import React, { useState, useCallback } from ''react'';
import { Button } from ''antd'';
import "antd/dist/antd.css";
function HookUseState(props) {
// useState 不能放在函数内部,这里设置初始值为0
const [num, setNum] = useState(0);
const [obj, setObj] = useState({ a: 1 });
const clickX = () => {
setNum(num + 1);
}
const clickObj = () => {
setNum(num + 1);
setObj({ ...obj, b: num + 1 });
}
return (
<div>
<h1>Learn, {props.name}</h1>
<p>
1、初始化为数字:{num}
</p>
<Button onClick={clickX}>
Click Number
</Button>
<p>
2、初始化为对象: a-{obj.a} ;b-{obj.b}
</p>
<Button onClick={clickObj}>
Click Object
</Button>
</div>
);
}
export default HookUseState
// 参考链接
// https://flaviocopes.com/react-hook-usecallback/
写在最后的话
学习路上,常常会懈怠。
《有想学技术需要监督的同学嘛~》
https://mp.weixin.qq.com/s/Fy...
如果有需要的伙伴,可以加我微信:learningisconnecting
或者可以关注我的公众号:国星聊成长(我会分享成长的方法)
Day 45/100 React Hooks 用法小结
(一)需求
最近在学习React,学到了React Hook的用法,但比较零散,今儿做下总结。
(二)小结
1、useState
是用来做组件内的状态管理的;
父子组件之间传值,使用props;
- 可传数值;
- 也可以传对象;
https://blog.csdn.net/xinghuo...
2、useEffect
为了避免整体重新渲染消耗性能,想只渲染其中一部分时使用useEffect。
https://blog.csdn.net/xinghuo...
3、useContext
使用useContext是为了方便爷孙组件间传值。
https://blog.csdn.net/xinghuo...
4、useReducer
使用useReducer是为了方便状态管理,用法和Redux特别像
https://blog.csdn.net/xinghuo...
5、useRef
使用useRef是为了修改某个DOM节点相关的操作
https://blog.csdn.net/xinghuo...
6、useMemo
使用useMemo是为了进而保留变量初始的值,并且依赖其他变量的改变后才更新的操作。
https://blog.csdn.net/xinghuo...
还不全,之后再慢慢补~
写在最后的话
学习路上,常常会懈怠。
《有想学技术需要监督的同学嘛~》
https://mp.weixin.qq.com/s/Fy...
如果有需要的伙伴,可以加我微信:learningisconnecting
或者可以关注我的公众号:国星聊成长(我会分享成长的方法)
关于参数 'data' 隐式有一个 'any' 类型 ts(7006) React hooks和参数隐式具有any类型的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于ahooks —— 高质量可靠的 React Hooks 库、ahooks正式发布React Hooks工具库、Day 38/100 React Hook之useState基本用法、Day 45/100 React Hooks 用法小结等相关内容,可以在本站寻找。
本文标签: