我有一个通过道具接收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'),
);


我该如何解决?

最佳答案

不知道为什么airbnb linter不允许对象作为PropType,但是您可以尝试从React文档中获取形状语法

 // An object taking on a particular shape
  optionalObjectWithShape: React.PropTypes.shape({
    color: React.PropTypes.string,
    fontSize: React.PropTypes.number
  }),


您也可以禁用此规则

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

“此规则是格式/文档偏好设置,不遵循它不会对代码质量产生负面影响。此规则鼓励使用prop类型来更具体地记录其用法。”

看起来airbnb的代码本身违反了该规则,因此将其禁用。

关于javascript - 警告通过商店作为 Prop ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41880891/

10-11 05:43