标题应该给你一般的想法。我(我的公司)想要启动一个新项目,这是我们当前使用React在Angular v1中编写的网站的重新启动。我想知道这是否是在生产中使用React Hooks的好时机,以及如果是这样我将承担哪些风险。
PS:没有正确答案,我只想在实施前考虑一些意见。提前致谢。
截至目前,钩子在可测试性和调试方面存在一些问题。无法使用组件实例上的调试器跟踪钩子的状态,因为它是使用类组件完成的,这只能通过React dev工具实现。酵素doesn't fully support hooks呢。钩子可能比组件生命周期方法更难模拟或间谍,因为这不能在组件实例上完成。
钩子有几个固有的问题,有时需要以违反直觉和过于复杂的方式解决。
useEffect
和useLayoutEffect
函数作用域存在众所周知的问题,这些问题不适用于setTimeout,事件和其他类型的基于回调的API(解决方法在this answer中有描述)。
没有与shouldComponentUpdate
相对应的可能会导致组件嵌套以防止不必要的更新。这尤其适用于useContext
。如果需要阻止更新,这并不比上下文Consumer
好,并且需要使用嵌套组件:
const WrapperWithConsumer = () => {
return <FooContext.Consumer>
{({ foo }) => <PureWrappedComponent foo={foo}/>}
</FooContext.Consumer>;
}
const WrapperWithHook = () => {
const { foo } = useContext(FooContext);
return <PureWrappedComponent foo={foo}/>
}
与任何其他最近的API一样,钩子限制项目与最新的React版本一起使用,防止其组件在旧项目中重用,并剥夺切换到替代实现的机会 - Preact,Inferno等。
你可以随时尝试,但我不推荐它,因为该技术仍处于早期阶段,首先尝试类组件,然后评估使用钩子。
也许这篇文章可以帮助你:https://blog.logrocket.com/react-hooks-lets-not-get-too-attached-11b0ac09b4b5