[英]How can I centralize proptypes which are not the same
我想集中可能包含不同屬性且是否需要的proptypes。 舉個例子:
組件A具有:
roomData: PropTypes.shape({
roomId: PropTypes.number,
roomType: PropTypes.string,
}).isRequired,
組件B具有:
roomData: PropTypes.shape({
roomId: PropTypes.number.isRequired,
roomType: PropTypes.string.isRequired,
game: PropTypes.shape({
gameId: PropTypes.number.isRequired,
drawDescription: PropTypes.string.isRequired,
}).isRequired,
}),
如果兩者完全相同,我知道如何做到這一點。 問題在於他們與眾不同。
由於PropTypes.shape
一個普通的JS對象,因此您可以創建一個外部文件來保存形狀,並在需要時使用/組合它們。
它就像utils/propTypesShapes.js
:
import PropTypes from 'prop-types'
export const transformToRequired = (shape) => {
return Object.keys(shape).reduce((acc, curr) => {
acc[curr] = shape[curr].isRequired;
return acc;
}, {})
}
export const roomDataBaseShape = {
roomId: PropTypes.number,
roomType: PropTypes.string,
}
然后在你的組件中:
import { roomDataBaseShape, transformToRequired } from 'propTypes/shapes'
ComponentA.propTypes = {
roomData: PropTypes.shape(roomDataBaseShape).isRequired
}
ComponentB.propTypes = {
roomData: PropTypes.shape({
...transformToRequired(roomDataBaseShape),
game: PropTypes.shape({
gameId: PropTypes.number.isRequired,
drawDescription: PropTypes.string.isRequired
}).isRequired
})
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.