React isValidElement出错为false

时间:2017-09-26 17:55:57

标签: javascript reactjs

这是一个简单的例子:

const Foo = () => {
    return (
    <div>foo</div>
  );
}

class Bar extends React.Component {
    render() {
    return (
        <div>bar</div>
    )
  }
}

console.log(React.isValidElement(Foo));
console.log(React.isValidElement(Bar));

这两个都返回false。那是为什么?

3 个答案:

答案 0 :(得分:9)

Component != Element

FooBar组件元素基本上是&#34;实例化&#34;的结果。 (也不是真的,不确定正确的术语是什么)一个组件。它是构造函数/函数/字符串(用于HTML组件),道具和子元素的组合。

当你致电React.createElement(Foo)时,你会得到一个元素,这就是<Foo />正在做的事情。

&#13;
&#13;
const Foo = () => {
    return (
    <div>foo</div>
  );
}
console.log(React.isValidElement(<Foo />));
console.log(<Foo bar={42} />);
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

const Foo = () => <div>foo</div>;

class Bar extends React.Component {
    render() {
       return (
          <div>bar</div>
       )
    }
}

console.log(React.isValidElement(<Foo />));
console.log(React.isValidElement(<Bar />));

答案 2 :(得分:0)

要检查功能组件,请执行以下操作:

typeof Foo === 'function'