Airbnb JS StyleGuide和history.push不要结合使用

时间:2018-10-31 13:01:40

标签: reactjs eslint-config-airbnb

我正在编写一个React应用,即导航栏。 我在那里有一个徽标和navItems。 徽标显示和导航栏背景的颜色是有条件的。 向esLint添加了Aibnb指南,现在我的导航栏代码如下:

class Toolbar extends Component {
    handleClick = () => {
        this.props.history.push('/');
    }

    render() {
        const { color, showLogo } = this.props;
        return (
            <header
                style={{
                    backgroundColor: color,
                }}
                className={classes.Toolbar}
            >
                <Logo click={this.handleClick} show={showLogo} />
                <NavItems />
            </header>
        );
    }
}

Toolbar.propTypes = {
    color: PropTypes.string.isRequired,
    showLogo: PropTypes.string.isRequired,
};

export default withRouter(Toolbar);

,我得到以下eslint错误:

eslint errors

(第11行)是

this.props.history.push('/');

如何转换此方法以使代码编译并正常工作?

(试图将其重写为破坏性的道具分配,出现了类似无法获得未定义的“推”之类的错误消息)

2 个答案:

答案 0 :(得分:2)

设置history PropType 将帮助您摆脱错误:

Toolbar.propTypes = {
  color: PropTypes.string.isRequired,
  showLogo: PropTypes.string.isRequired,
  history: PropTypes.shape({
    push: PropTypes.func.isRequired,
  }).isRequired,
};

答案 1 :(得分:1)

您应该更新

Toolbar.propTypes = {
color: PropTypes.string.isRequired,
showLogo: PropTypes.string.isRequired,
history:PropTypes.node
};

const {history} = this.props

更新

history:PropTypes.shape({push:PropTypes.func})