You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Slide Routes触发findDOMNode警告问题求助(搭配MUI)

解决React Slide Routes在StrictMode下的findDOMNode警告问题

问题描述

切换路由时触发以下警告:

Warning: findDOMNode is deprecated in StrictMode. findDOMNode was passed an instance of Transition which is inside StrictMode. Instead, add a ref directly to the element you want to reference

使用React Slide Routes实现路由滑动切换,搭配最新版Material-UI,移除React.StrictMode能屏蔽警告但未解决根源问题,尝试添加nodeRef无效。

相关代码

Router.js

<SlideRoutes
    pathList={["/", "/login", "/signup", "/main", "/signAuth", "*"]}
>
  <Route element={<ProfileDrawer />}>
    <Route path="/main" element={<Mainpage />} />
  </Route>
  <Route index path="/" element={<Login />} />
  <Route path="/Login" element={<Login />} />
  <Route
    path="/Signup"
    element={
      <React.Suspense fallback={<LazyLoader />}>
        <Signup />
      </React.Suspense>
    }
  />
  <Route path="/signAuth" element={<Verification />} />
  <Route path="*" element={<NotFound />} />
</SlideRoutes>

index.js

<React.StrictMode>
  <BrowserRouter>
    <StyledEngineProvider injectFirst>
      <Provider store={store}>
        <App />
      </Provider>
    </StyledEngineProvider>
  </BrowserRouter>
</React.StrictMode>

解决方案

1. 升级React Slide Routes到兼容版本

警告的核心原因是React Slide Routes内部使用了StrictMode已弃用的findDOMNode方法。先尝试升级库到最新稳定版,看是否已修复该兼容问题:

npm update react-slide-routes
# 或用yarn
yarn upgrade react-slide-routes

如果最新版仍未解决,可去库的issue区提交问题,等待维护者修复。

2. 自定义滑动路由组件

如果第三方库长期不修复,直接基于React Transition Group自己实现滑动路由,避免依赖兼容问题:

import { useLocation, Routes, Route } from 'react-router-dom';
import { TransitionGroup, CSSTransition } from 'react-transition-group';

const CustomSlideRoutes = () => {
  const location = useLocation();
  // 创建ref绑定到路由容器
  const routeRef = React.useRef(null);

  return (
    <TransitionGroup>
      <CSSTransition
        key={location.key}
        timeout={300}
        classNames="slide"
        nodeRef={routeRef}
      >
        <div ref={routeRef}>
          <Routes location={location}>
            <Route element={<ProfileDrawer />}>
              <Route path="/main" element={<Mainpage />} />
            </Route>
            <Route index path="/" element={<Login />} />
            <Route path="/Login" element={<Login />} />
            <Route
              path="/Signup"
              element={
                <React.Suspense fallback={<LazyLoader />}>
                  <Signup />
                </React.Suspense>
              }
            />
            <Route path="/signAuth" element={<Verification />} />
            <Route path="*" element={<NotFound />} />
          </Routes>
        </div>
      </CSSTransition>
    </TransitionGroup>
  );
};

再添加对应的CSS滑动样式:

.slide-enter {
  transform: translateX(100%);
}
.slide-enter-active {
  transform: translateX(0);
  transition: transform 300ms ease-in-out;
}
.slide-exit {
  transform: translateX(0);
}
.slide-exit-active {
  transform: translateX(-100%);
  transition: transform 300ms ease-in-out;
}

3. 临时修改库源码(不推荐)

如果必须用原库,可临时修改React Slide Routes的源码:找到内部使用Transition组件的地方,给Transition添加nodeRef属性并绑定到对应DOM元素的ref。但这种方法会在库更新后失效,仅作为应急方案。

内容的提问来源于stack exchange,提问作者yasxcv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 12:55:17