Reactjs 如何在react中调用映射中的钩子函数

Reactjs 如何在react中调用映射中的钩子函数,reactjs,jsx,ketting,Reactjs,Jsx,Ketting,我正在为我的客户使用ketting。 库提供了访问某些数据的钩子,在我的例子中,这是一个钩子: import { useResource } from 'react-ketting'; ... const { loading, error, data } = useResource('https://api.example/article/5'); 我有多个资源,我想循环使用它们: items.map(item => { const { loading, error, data, res

我正在为我的客户使用ketting。 库提供了访问某些数据的钩子,在我的例子中,这是一个钩子:

import { useResource } from 'react-ketting';
...
const { loading, error, data } = useResource('https://api.example/article/5');
我有多个资源,我想循环使用它们:

items.map(item => {
const { loading, error, data, resourceState } = useResource(item);

 myItems.push({
  title: data.name,
  onClick: () => go(resourceState.links.get('self').href),
 });
});
但是React不接受像这样循环useResource钩子

所以我找到了一个肮脏的解决方案,我并不自豪

import React from 'react';
import { useCollection, useResource } from 'react-ketting';

let myItems = [];

const Collection = ({ resource, go }) => {
  const { items } = useCollection(resource);

  myItems = [];

  return (
    <div>
      {items.map(item => (
        <CollectionItem go={go} resource={item} />
      ))}
      <ElementsUser elements={myItems} />
    </div>
  );
};

const CollectionItem = ({ resource, go }) => {
  const { data, resourceState } = useResource(resource);

  myItems.push({
    title: data.name,
    onClick: () => go(resourceState.links.get('self').href),
  });
  return null;
};

从“React”导入React;
从'react ketting'导入{useCollection,useResource};
让myItems=[];
常量集合=({resource,go})=>{
const{items}=useCollection(资源);
myItems=[];
返回(
{items.map(item=>(
))}
);
};
const CollectionItem=({resource,go})=>{
const{data,resourceState}=useResource(资源);
myItems.push({
标题:data.name,
onClick:()=>go(resourceState.links.get('self').href),
});
返回null;
};
你有处理那个问题的建议吗

是否可能导致:

无法对未安装的组件执行React状态更新。这是一个no-op,但它表示应用程序中存在内存泄漏。要修复此问题,请取消useEffect清理函数中的所有订阅和异步任务


每个资源使用1个组件正是推荐的模式。我甚至会说这是最好的做法。请注意,如果存在缓存的资源状态,则对
useResource
的调用不会导致API调用

如果您发现每个迭代看到一个请求,您可能希望确保集合将每个成员作为嵌入资源返回。如果使用
useCollection
钩子,请求将包括一个
preference:transclude=item
头,向服务器提示可能需要嵌入


此外,react-ketting将在卸载时进行清理。

如果有确定的项目计数,则可以在循环中使用挂钩。如果不随时间变化,请将items.length设为参考。否则,您需要重新实现useResource以对多个项目进行操作,或者将useResource调用移动到嵌套组件。items.length将随时间变化。这就是我将useResource移动到嵌套组件时所做的吗?不?事实上,您的“脏”解决方案非常好,而且会很好地工作-只要您不需要组件树中较高级别的
useResource()
生成的数据。由于useResource()正在进行API调用,更新未安装组件的状态时可能会导致错误?@Evert否这是一个正在构建的私有API。我们正在尝试ketting的力量。你好,我有一个关于ketting的相关帖子,以便管理PUT/post。