【发布时间】:2019-12-17 20:47:30
【问题描述】:
基本上是这样的:
function MyComponent() {
let [count, setCount] = useState(1)
let memo = useMyMemo(() => new MyClass)
return <div onClick={update}>{count}</div>
function update() {
setCount(count + 1)
}
}
function useMyMemo(fn) {
// what to do here?
}
class MyClass {
}
我希望useMyMemo每个组件实例只返回 1 个类实例。我如何设置它来实现它而不使用任何现有的 React 钩子?如果没有 React 钩子是不可能的,他们为什么不呢?如果只能通过访问内部 API 来实现,你会怎么做?
作为奖励,了解如何传递属性依赖项以及如何使用它来确定备忘录是否应该无效会很有帮助。
【问题讨论】:
-
不是答案,但您需要深入研究 React 内部结构才能做到这一点。 Hooks 之所以起作用,是因为 React 知道它当前正在调用的组件函数。
useState和这样的人使用内部信息来完成他们的工作(请参阅整个ReactHooks.jsfile 中的resolveDispatcher调用),它们基本上是调用“调度程序”对象的包装器。一个这样的调度程序被实现here。
标签: javascript reactjs memoization internals