javascript - 为什么我无法在回调中调用 useRef ?

标签 javascript reactjs react-hooks

当我编写此代码时,出现错误:

React Hook "useRef" cannot be called inside a callback. React Hooks must be called in a React function component or a custom React Hook function

我应该用这段代码做什么?

return ITEMS.map((item, i) => {
  const elementRef = useRef(null);
      return (
        <div
          ref={elementRef}
          key={i}
        >
          <p>{item.name}</p>
          <Wrapper>
            {item.name === visibleItem && (
                <Item
                  parentRef={elementRef}
                />
            )}
          </Wrapper>
        </div>
      );
    }

最佳答案

这里有两种可能性,要么将 useRef 与对象/数组一起使用,要么按照 Yevgen Gorbunkov 的建议使用 createRef

我不完全确定这些的可行性,因为 createRef 选项将在每个渲染上创建全新的引用,并且您需要 useRef 选项确保您的键/索引始终相同。

const ITEMS = [{ name: "test" }, { name: "test2" }];
export default function App() {
  const ref = useRef({});
  return (
    <div className="App">
      <h1>Hello CodeSandbox</h1>
      <h2>Start editing to see some magic happen!</h2>
      {ITEMS.map((item, idx) => {
        return (
          <div key={idx} ref={element => (ref.current[idx] = element)}>
            <p>{item.name}</p>
            <Wrapper>
              {item.name === visibleItem && (
                <Item parentRef={ref.current[idx]} />
              )}
            </Wrapper>
          </div>
        );
      })}
      {ITEMS.map((item, idx) => {
        const ref = createRef();
        return (
          <div key={idx} ref={ref}>
            <p>{item.name}</p>
            <Wrapper>
              {item.name === visibleItem && <Item parentRef={ref} />}
            </Wrapper>
          </div>
        );
      })}
    </div>
  );
}

关于javascript - 为什么我无法在回调中调用 useRef ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61489857/

相关文章:

javascript - JSON 服务器 - 将数据发布到数组中的特定对象中

javascript - 递归方法 - 每次调用时递增 a 值

javascript - ng-class 内的正则表达式引发错误

javascript - 如何使用 ckeditor 和 jquery 更新文本区域字段?

Jquery 代码的 Javascript 代码不起作用

javascript - 初始渲染/重新渲染后如何根据 DOM 节点信息设置状态? ( react )

javascript - React.js 2 向绑定(bind) : two-levels deep path in valueLink

javascript - React 在使用 ErrorBoundary 捕获后仍然显示错误

reactjs - 单击按钮后 useState 计数器闪烁

javascript - 使用 Hooks 将 React 类转换为功能组件。如何修复 "uncontrolled input"错误