ent*_*one 2 javascript properties dynamically-generated reactjs react-hooks
我使用反应库前。react-query
。这个库提供了一个钩子useQuery
ex。
const {data, isLoading} = useQuery(['users'], userService.getUsers);
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果我想使用两个useQuery
钩子,以避免重复的命名变量:
data, isLoading
Run Code Online (Sandbox Code Playgroud)
我必须做这样的事情:
const users = useQuery(['users'], userService.getUsers);
const products = useQuery(['products'], userService.getProducts);
...
// then use
users.data, users.isLoading
// and
products.data, products.isLoading
...
Run Code Online (Sandbox Code Playgroud)
为了使这个逻辑更加一致,我尝试制作自己的自定义挂钩并重命名useQuery
内部提供的属性,以便我可以使用扩展语法进行访问。
function useGetUsers(){
const {data, isLoading} = useQuery(['users'], userService.getUsers);
return {
usersData: data,
isUsersLoading: isLoading
}
}
Run Code Online (Sandbox Code Playgroud)
和产品一样。
现在,我可以将前面的示例写为:
const {usersData, isUsersLoading} = useGetUsers();
const {productsData, isProductsLoading} = useGetProducts();
Run Code Online (Sandbox Code Playgroud)
当然,为了拥有所有的键,我迭代了useQuery
钩子提供的所有键,并用我自己的驼峰大小写规则等定制了我自己的自定义键。
我的问题是,这样可以吗?我的意思是,这被认为是一个好的做法还是只是符合users.isLoading
逻辑?
T.J*_*der 11
我发现令人惊讶的是,该钩子返回一个对象而不是像那样的数组useState
,因为这就是返回数组的原因。 useState
(我不熟悉那个钩子;也许它会返回很多东西,在这种情况下使用命名属性确实有意义。)
您可以在解构中使用重命名:
const {data: users, isLoading: usersLoading} = useQuery(['users'], userService.getUsers);
const {data: products, isLoading: productsLoading} = useQuery(['products'], userService.getProducts);
Run Code Online (Sandbox Code Playgroud)
然后将users
和用于usersLoading
用户的东西,和products
/productsLoading
用于产品的东西。
如果您要编写自己的钩子,我想我宁愿编写一个返回数组的通用钩子:
function useStuff(what, how) {
const {data, isLoading} = useQuery(what, how);
return [data, isLoading];
}
Run Code Online (Sandbox Code Playgroud)
然后:
const [users, usersLoading] = useStuff(['users'], userService.getUsers);
const [products, productsLoading] = useStuff(['products'], userService.getProducts);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5300 次 |
最近记录: |