当React中存在带有钩子的功能组件时,是否仍应使用类组件?

时间:2020-06-19 17:23:12

标签: reactjs react-component

嗨,我是React的新手。我在过去的两周里开始学习React,目前我正在和一个朋友一起使用MERN堆栈创建一个网站。每当看到维护状态的需求时,我就一直在使用类组件,但是我发现钩子可以模仿React类,并且可以减少代码长度,提高可读性并创建更多可维护的代码。所以我只是想知道,如果存在钩子,那么从2020年起应该在React中使用类组件吗?类涵盖哪些用例,而功能组件没有涵盖这些用例?

2 个答案:

答案 0 :(得分:0)

挂钩是类组件的完整替代品。从react docs

我们希望Hooks涵盖类的所有现有用例,但在可预见的将来,我们将继续支持类组件。

阅读上面链接的有关采用策略,钩子背后的意图的页面-是理解和形成意见的好地方。

我个人而言,我喜欢钩子。自从引入了钩子以来,就没有使用过类组件。我还没有找到用例组件,因为钩子不能满足要求。

答案 1 :(得分:0)

这是偏爱的事情,但社区正在朝着钩子前进。 钩子和其他功能几乎可以覆盖钩子中完成的所有事情

例如

from pdfminer.layout import LAParams, LTTextBox from pdfminer.pdfpage import PDFPage from pdfminer.pdfinterp import PDFResourceManager from pdfminer.pdfinterp import PDFPageInterpreter from pdfminer.converter import PDFPageAggregator fp = open('Ozark-Episode-1-01-Sugarwood.pdf', 'rb') rsrcmgr = PDFResourceManager() laparams = LAParams() device = PDFPageAggregator(rsrcmgr, laparams=laparams) interpreter = PDFPageInterpreter(rsrcmgr, device) pages = PDFPage.get_pages(fp) for index, page in enumerate(pages): interpreter.process_page(page) layout = device.get_result() for lobj in layout: if isinstance(lobj, LTTextBox): x, y, text = lobj.bbox[0], lobj.bbox[3], lobj.get_text() print('%r: %s' % ((round(x, 1), round(y,1)), text) => (108.0, 579.9): No, it wasn’t-- (194.0, 591.9): MARTY (333.0, 591.9): BRUCE Sorry, all right? (252.0, 555.9): BRUCE (180.0, 543.9): What then? A place like this validates us. We’re making money hand over fist. Tell me we don’t need the higher rent on our books. (108.0, 483.9): Marty squares up to the skyline, Bruce behind him.

useEffect => componentDidMount, componentDidUpdate, componentWillMount

useState => this.setState({})

有些事情在类中比在钩子中容易。像React.memo中的第二个参数是一个回调,以确保在执行之前更改状态。这在钩子中是可行的,但还不如以前