React 组件的 not required prop 是否应该在 defaultProps 中
Should React component's not required prop be inside defaultProps
首先,我已经查看了 React 的文档,但没有找到我的问题的答案。我在 SO 上做了同样的事情,但没有成功。
问题是:如果在 React 的组件中使用的 prop 不是必需的,它应该在 defaultProps 中吗?
Component.propTypes = {
getName: PropTypes.func,
type: PropTypes.string.isRequired,
};
static defaultProps = {
type: 'text',
getName: () => {}, // should this be here at all ?!?
};
我问这个是因为无论我把它放在这里还是不放,控制台都没有错误。问题是,我在一些项目中看到人们使用 defaultProps 为组件提供一些回退值,而在我从事的其他项目中,在 defaultProps 中,人们只为具有 isRequired [=17= 的字段设置回退值] 为了避免渲染错误或控制台错误,如果他们不将该道具传递给组件。
缺少 defaultProps 不会导致任何错误。这更像是一个好习惯。如果组件没有收到它期望的道具,则为组件的所有道具保留 defaultProps 将减少应用程序崩溃的可能性。如果这种情况处理不当,defaultProps 确实有帮助。从开发人员的角度来看,通过查看组件的 propTypes 和 defaultProps,开发人员将了解它期望的类型和值。
如果该函数传递给某个事件,即
<button onClick={props.callback} />
如果我这样做,有时根本不需要 onClick(就像我们只想显示按钮没有点击操作)。那个时候我们不会通过它,如果有人点击我们会得到错误 undefined is not a function
因为回调是 undefined
为了解决这个问题,我们要做的是
<button onClick={() => props.callback && props.callback()} />
但这效率不高,因为每次渲染都会创建一个新函数,这不是好的做法。
下一条路是
function Button(props) {
<button onClick={props.callback} />
}
props.defaultProps = {
callback: () => {} // that will fallback if is not passed.
}
这将处理回退,看起来也很干净,并且是一种更好的方法。
如果我们根据需要标记 prop
那么 eslint 无论如何都会抛出 this error
首先,我已经查看了 React 的文档,但没有找到我的问题的答案。我在 SO 上做了同样的事情,但没有成功。
问题是:如果在 React 的组件中使用的 prop 不是必需的,它应该在 defaultProps 中吗?
Component.propTypes = {
getName: PropTypes.func,
type: PropTypes.string.isRequired,
};
static defaultProps = {
type: 'text',
getName: () => {}, // should this be here at all ?!?
};
我问这个是因为无论我把它放在这里还是不放,控制台都没有错误。问题是,我在一些项目中看到人们使用 defaultProps 为组件提供一些回退值,而在我从事的其他项目中,在 defaultProps 中,人们只为具有 isRequired [=17= 的字段设置回退值] 为了避免渲染错误或控制台错误,如果他们不将该道具传递给组件。
缺少 defaultProps 不会导致任何错误。这更像是一个好习惯。如果组件没有收到它期望的道具,则为组件的所有道具保留 defaultProps 将减少应用程序崩溃的可能性。如果这种情况处理不当,defaultProps 确实有帮助。从开发人员的角度来看,通过查看组件的 propTypes 和 defaultProps,开发人员将了解它期望的类型和值。
如果该函数传递给某个事件,即
<button onClick={props.callback} />
如果我这样做,有时根本不需要 onClick(就像我们只想显示按钮没有点击操作)。那个时候我们不会通过它,如果有人点击我们会得到错误 undefined is not a function
因为回调是 undefined
为了解决这个问题,我们要做的是
<button onClick={() => props.callback && props.callback()} />
但这效率不高,因为每次渲染都会创建一个新函数,这不是好的做法。
下一条路是
function Button(props) {
<button onClick={props.callback} />
}
props.defaultProps = {
callback: () => {} // that will fallback if is not passed.
}
这将处理回退,看起来也很干净,并且是一种更好的方法。
如果我们根据需要标记 prop
那么 eslint 无论如何都会抛出 this error