如果属性值为
true
, 可以直接省略. eslint:// bad
<Foo
hidden={true}
/>
// good
<Foo
hidden
/>
// good
<Foo hidden />
<img>
标签总是添加alt
属性. 如果图片以presentation(感觉是以类似PPT方式显示?)方式显示,alt
可为空, 或者<img>
要包含role="presentation"
. eslint:jsx-a11y/alt-text
// bad
<img src="hello.jpg" />
// good
<img src="hello.jpg" alt="Me waving hello" />
// good
<img src="hello.jpg" alt="" />
// good
<img src="hello.jpg" role="presentation" />
不要在
alt
值里使用如 “image”, “photo”, or “picture”包括图片含义这样的词, 中文也一样. eslint:-
// bad - not an ARIA role
<div role="datepicker" />
<div role="range" />
// good
<div role="button" />
不要在标签上使用
accessKey
属性. eslint:jsx-a11y/no-access-key
// bad
<div accessKey="h" />
// good
<div />
避免使用数组的index来作为属性
key
的值,推荐使用唯一ID. (@robinpokorny/index-as-a-key-is-an-anti-pattern-e0349aece318">为什么?)对于所有非必须的属性,总是手动去定义
defaultProps
属性.// bad
function SFC({ foo, bar, children }) {
return <div>{foo}{bar}{children}</div>;
}
SFC.propTypes = {
foo: PropTypes.number.isRequired,
bar: PropTypes.string,
children: PropTypes.node,
};
// good
return <div>{foo}{bar}{children}</div>;
}
SFC.propTypes = {
foo: PropTypes.number.isRequired,
bar: PropTypes.string,
children: PropTypes.node,
SFC.defaultProps = {
bar: '',
children: null,
};
尽可能少地使用扩展运算符
例外情况:
使用了变量提升的高阶组件
function HOC(WrappedComponent) {
return class Proxy extends React.Component {
Proxy.propTypes = {
text: PropTypes.string,
isLoading: PropTypes.bool
};
render() {
return <WrappedComponent {...this.props} />
}
}
}
-
特别提醒:尽可能地筛选出不必要的属性。同时,使用来预防问题出现。
// good
render() {
const { irrelevantProp, ...relevantProps } = this.props;
return <WrappedComponent {...relevantProps} />
}
// bad
render() {
const { irrelevantProp, ...relevantProps } = this.props;
}