警告通过商店作为道具

时间:2017-01-26 18:56:19

标签: javascript ecmascript-6

我有一个组件通过道具接收store。因此,使用airbnb预设的tslint告诉我必须为商店声明PropTypes,所以我补充道:

Root.propTypes = {
  store: PropTypes.object.isRequired,
};

但是Prop type object is forbidden。所以我将代码更改为:

Root.propTypes = {
  store: PropTypes.objectOf(PropTypes.object).isRequired,
};

但现在浏览器控制台告诉我:

Warning: Failed prop type: Invalid prop `store.dispatch` of type `function` supplied to `Root`, expected `object`.

index.js我有:

const store = configureStore();

ReactDOM.render(
  <Root store={store} />,
  document.getElementById('root'),
);

我该如何解决?

1 个答案:

答案 0 :(得分:2)

不确定为什么airbnb linter不允许将对象作为PropType,但您可以尝试使用React docs中的形状语法

class TestTest extends \PHPUnit\Framework\TestCase
{
    function test() {

        throw new \Exception(
            sprintf(
                "Inner: %s Outer: %s",
                "Inner message",
                 (new \Exception("Outer message"))->getMessage()
            ),
            0
        );
    }
}

您也可以停用此规则

https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/forbid-prop-types.md#when-not-to-use

“此规则是格式/文档首选项,不遵循它将不会对代码的质量产生负面影响。此规则鼓励更具体地记录其用法的道具类型。”

看起来airbnb的代码本身有一些违反此规则的行为并且禁用了它。