findDOMNode 已弃用

findDOMNode is deprecated

提问人:Paul 提问时间:7/28/2022 最后编辑:Paul 更新时间:8/4/2022 访问量:606

问:

在我的网站上(用 React 编写),我使用日历,以便用户可以选择日期和时间范围。为此,我使用 react-advanced-datetimerange-picker 库。

同样在索引.js文件中,我使用了 <React.StrictMode>。因此,在使用该库时,我有一些警告。我想摆脱它们。

我知道删除 <React.StrictMode> 的最简单方法。 但这并不完全正确。 下面是我代码的一部分

    return (
      <DateTimeRangeContainer
        ranges={ranges}
        autoApply={true}
        start={time.start}
        end={time.end}
        local={local}
        applyCallback={handleDateRangeChange}
        forceMobileMode
        years={[2022, 2025]}
        style={styleRange}
      >
      </DateTimeRangeContainer>
  
  );

整个问题出在 DateTimeRangeContainer 组件上。如果我删除它,警告就会消失。所以这是我的警告:

react-dom.development.js:86 警告:在严格模式树中检测到旧上下文 API。所有 16.x 版本都将支持旧 API,但使用它的应用程序应迁移到新版本。请更新以下组件:FormControl。在此处了解有关此警告的更多信息:https://reactjs.org/link/legacy-context

第二。.

react-dom.development.js:86 警告:findDOMNode 在 StrictMode 中已弃用。findDOMNode 被传递给了 DateTimeRangeContainer 的实例,该实例位于 StrictMode 中。相反,请直接将 ref 添加到要引用的元素。在此处了解有关安全使用引用的更多信息:https://reactjs.org/link/strict-mode-find-node

帮我修复它们

javascript reactjs datetime 警告 strict-mode

评论

3赞 Abdollah Keshtkar 7/30/2022
该库太旧了,它使用的是 React 15.6。当时,findDOMNode 还可以,但在 react 16 和一段时间之后,他们弃用了旧的上下文 API。修复警告的唯一方法是重构到更新的 React 版本并删除 .findDOMNodereact-advanced-datetimerange-pickerfindDOMNode
1赞 Alejandro 8/1/2022
或选择其他日期选择器
1赞 Abdollah Keshtkar 8/1/2022
@Paul,我建议您使用另一个日期选择器,因为修复警告会非常痛苦。您应该从其 GitHub 存储库中分叉库,然后通过删除已弃用的功能并重写这些部分来更新代码,以便在不使用已弃用功能的情况下正常工作。
0赞 Abdollah Keshtkar 8/1/2022
@Paul,我已经很久没有使用日期选择器了,但我认为您可以尝试 react-multi-date-picker。它有一个时间范围,但我建议你搜索另一个它的回购活动时间范围。

答:

3赞 Atabic Umer 8/4/2022 #1

该问题很可能是由于库中使用了旧版本的 react。一种解决方法是使用另一个库,另一种方法是等待作者更新库。

我在库存储库上创建了一个问题。请在这里找到它

评论

0赞 Paul 8/5/2022
谢谢你的回答。在这种情况下,我需要什么?只是在等待答案?
0赞 Kim Skogsmo 8/5/2022
@Paul 你可能会等待很长时间,作者没有世界上所有的时间,有时旧项目只是保持原样。也许你很幸运,他们会很快修复它,但不要指望它。正如另一个人所说,你也可以在他们的 github 上,分叉整个 repo,然后自己更新它。然后,您可以删除已安装的 node_modules 包,并将其捆绑在源代码中。或者向原始库提交 PR,并希望他们合并它。
0赞 Atabic Umer 8/26/2022
您可以在此处选择其他库。npm 上最常见的一个是这个 npmjs.com/package/react-date-range。检查这是否满足您的需求。对于延迟回复@Paul也表示歉意