React无法识别DOM元素上的`computedMatch`属性。

23

我正在使用React TypeScript与Bootstrap-v3,问题在于面包屑导航和react-router-dom:

React发出了一个警告:在DOM元素上无法识别computedMatch属性。

这个computedMatch从哪里来? 我正在使用最新的React-Bootstrap:

第一行是带有奇怪computedmatch属性的HTML节点:

<ol computedmatch="[object Object]" location="[object Object]" role="navigation" aria-label="breadcrumbs" class="breadcrumb"><li class=""><span href="#" role="button"><a href="/">Home</a></span></li><li class=""><span href="#" role="button"><a href="/">React</a></span></li><li class=""><span href="#" role="button"><a href="/name">Author</a></span></li></ol>

以下是Breadcrumb.js库文件:

import _extends from "@babel/runtime-corejs2/helpers/esm/extends";
import _objectWithoutPropertiesLoose from "@babel/runtime-corejs2/helpers/esm/objectWithoutPropertiesLoose";
import _inheritsLoose from "@babel/runtime-corejs2/helpers/esm/inheritsLoose";
import classNames from 'classnames';
import React from 'react';
import BreadcrumbItem from './BreadcrumbItem';
import { bsClass, getClassSet, splitBsProps } from './utils/bootstrapUtils';

var Breadcrumb =
/*#__PURE__*/
function (_React$Component) {
  _inheritsLoose(Breadcrumb, _React$Component);

  function Breadcrumb() {
    return _React$Component.apply(this, arguments) || this;
  }

  var _proto = Breadcrumb.prototype;

  _proto.render = function render() {
    var _this$props = this.props,
        className = _this$props.className,
        props = _objectWithoutPropertiesLoose(_this$props, ["className"]);

    var _splitBsProps = splitBsProps(props),
        bsProps = _splitBsProps[0],
        elementProps = _splitBsProps[1];

    var classes = getClassSet(bsProps);
    return React.createElement("ol", _extends({}, elementProps, {
      role: "navigation",
      "aria-label": "breadcrumbs",
      className: classNames(className, classes)
    }));
  };

  return Breadcrumb;
}(React.Component);

Breadcrumb.Item = BreadcrumbItem;
export default bsClass('breadcrumb', Breadcrumb);

我的tsx代码是:

<Router>
          <Switch>
            <Breadcrumb computedMatch={undefined}>
              <Breadcrumb.Item componentClass="span">
                <Link to="/">Home</Link>
              </Breadcrumb.Item>
              <Breadcrumb.Item componentClass="span">
                <Link to="/">React</Link>
              </Breadcrumb.Item>
              <Breadcrumb.Item active={false} componentClass="span">
                <Link to="/name">Author</Link>
              </Breadcrumb.Item>
            </Breadcrumb>
            <Route path="/:name" component={gridInstance} />
          </Switch>
        </Router>

我建议您在文件中添加 "import ReactDOM from 'react-dom';"。如果缺少此项可能会导致一些关于dom的问题。 - Root
3个回答

53
您收到此警告是因为您放置了<Switch>标记的方式不正确。仅在<Switch>标记内保留<Route/><Redirect/>标记,以摆脱警告。

可以尝试像这样做:

<Router>
    <Breadcrumb computedMatch={undefined}>
      <Breadcrumb.Item componentClass="span">
        <Link to="/">Home</Link>
      </Breadcrumb.Item>
      <Breadcrumb.Item componentClass="span">
        <Link to="/">React</Link>
      </Breadcrumb.Item>
      <Breadcrumb.Item active={false} componentClass="span">
        <Link to="/name">Author</Link>
      </Breadcrumb.Item>
    </Breadcrumb>
    <Switch>
      <Route path="/:name" component={gridInstance} />
    </Switch>
</Router>

6

不要像这样在 Switch 方法中使用您的组件:

<Switch>
{component}
<Component /> 
</Switch>

只在 Switch 中使用 重定向/路由 方法!!


0

我通过在 Bootstrap 中简单使用 breadcrumb css 类来制作面包屑。(这意味着没有使用Bootstrap-v3中的Breadcrumb和Breadcrumb.Item),问题得到了解决。 在Bootstrap-v3中,面包屑肯定不是一个简单的容器,而是具有一些文档中未包含的状态。

const MyBreadcrumb = () => (
  <Router>
    <div>
      <ol className="breadcrumb">
        <li>
          <Link to="/">Home</Link>
        </li>
        <li>
          <Link to="/about">About</Link>
        </li>
        <li>
          <Link to="/topics">Topics</Link>
        </li>
      </ol>

      <hr />
    </div>
  </Router>
);

2
嘿,大家好,5个月过去了,现在我们有更好的解决方案:从“react-router-bootstrap”中导入{LinkContainer}。 - nimbus_debug

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接