我想集中可能包含不同属性且不是必需属性的原型。例如:
组件A具有:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:context=".MainActivity"
tools:layout_editor_absoluteY="25dp">
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView"
app:layout_constraintBottom_toBottomOf="parent"
tools:layout_editor_absoluteX="67dp"
tools:text="Hello World" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
tools:text="sdfsfsfsfs" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:text="Hello World" />
</android.support.constraint.ConstraintLayout>
而组件B具有:
roomData: PropTypes.shape({
roomId: PropTypes.number,
roomType: PropTypes.string,
}).isRequired,
如果两者完全相同,我知道该怎么做。问题在于它们是不同的。
答案 0 :(得分:0)
由于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
})
}