【发布时间】:2020-03-31 18:33:57
【问题描述】:
关于在 React 功能组件中创建新类实例的一般问题。我将 Tone.js 用于项目和此处的示例,但与任何事情都相关。
选项 A 和 B 之间哪个是正确的模式? B 是常见的,但如果 A 不正确,为什么?如果使用 useEffect,则发生第一次渲染然后创建实例似乎效率低下。所以你的代码充满了channels.current && doSomething()。为什么不能作为 useRef 初始值?
如果 ref 在重新渲染后保持其值,是否需要 useEffect ?
如果我想在某个时候更新值 (4,0),动态值,而不是 useRef,将类实例创建为选项 C 中的 useState 初始值是否明智?
A.作为 useRef 初始值
const channels = useRef({
channel01: new Tone.Channel(4, 0),
channel02: new Tone.Channel(4, 0),
channel03: new Tone.Channel(4, 0)
});
B. useEffect 启动 ref
const channels = useRef(null);
useEffect(() => {
channels.current = {
channel01: new Tone.Channel(4, 0),
channel02: new Tone.Channel(4, 0),
channel03: new Tone.Channel(4, 0)
}
}, []);
C.作为useState初始值
const [channels, setChannels] = useState({
channel01: new Tone.Channel(4, 0),
channel02: new Tone.Channel(4, 0),
channel03: new Tone.Channel(4, 0)
})
【问题讨论】:
-
答案取决于用例...选项B没用。
标签: javascript reactjs functional-programming react-hooks