react js;使用 ESLint 规则解构 props 分配

标签 reactjs react-redux eslint eslint-config-airbnb

使用 ESLing 插件进行 react ,我在解构和 prop 类型验证方面感到困惑。 在类中如下所示

class Game extends Component {

  componentWillMount() {
    this.props.createNewPlayer(); //  Must use destructuring props assignment (react/destructuring-assignment)
  }

  render() {
    const { players } = this.props; // 'players' is missing in props validation (react/prop-types)
    const count = Object.keys(players).length;
    return (...);
  }
}

GameInit.propTypes = {createNewPlayer: PropTypes.func.isRequired};

const mapStateToProps = state => ({players: state.players});

export default connect(mapStateToProps,{ createNewPlayer })(Game);

所以如果我将第一部分的解构重写为

  componentWillMount() {
    const {createNewPlayer}=this.props; // 'createNewPlayer' is already declared in the upper scope. (no-shadow) 
    createNewPlayer();
  }

如果我将 proptypes 重写为

,则可以对播放器进行解构
GameInit.propTypes = {
  createNewPlayer: PropTypes.func.isRequired,
  players: PropTypes.object.isRequired, // Prop type `object` is forbidden (react/forbid-prop-types)
};

这里遵循 ESLint 规则的正确方法是什么?无需更改 .eslintrc

中的规则

最佳答案

这可能会解决您的第一个问题:

const {createNewPlayer: createNewPlayerAlt } = this.props;
createNewPlayerAlt();

对于第二部分,您应该指定此处的对象类型。

所有属性都是字符串的对象:

players: PropTypes.objectOf(PropTypes.String)

所有属性都是数字的对象:

players: PropTypes.objectOf(PropTypes.Number)

您有混合属性吗?然后使用形状:

player: PropTypes.shape({
    id: PropTypes.string,
    playerNumber: PropTypes.number
  }),

关于 react js;使用 ESLint 规则解构 props 分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52088455/

相关文章:

javascript - 用于装饰器工厂的 Eslint no-unused-var

javascript - React 缓存渲染组件

javascript - iOS上的ReactJS onClick

reactjs - Normalizr - 如何处理已经标准化的嵌套实体

reactjs - 从 Redux 设置初始状态

javascript - 如何使用 Typescript 将多个参数传递给 redux reducer ?

javascript - 如何在 ESLint 中设置全局警告级别?

javascript - eslint 规则强制 ) 和 { 之间留有空格

javascript - 在应用程序中收听 chrome 扩展安装

http - 无法在 meteor 1.3 的客户端上导入 HTTP 模块