React PropTypes - 以数字为键的形状
React PropTypes - shape with numbers as keys
我正在尝试为我的一个 React 组件指定 PropTypes,但 运行 遇到了一些问题。我试图描述的对象将如下所示(数组将包含多个对象):
rounds: {
1: [
{
date: 1429354800000,
arena: 'Arena name',
scoreHome: 3,
scoreAway: 2,
teamHome: 'Home team name',
teamAway: 'Away team name',
spectators: 10
}
]
}
提前不知道会有多少轮。所以我可以得到
rounds: { 1: [..], 2: [..], 3: [..] }
这是我目前拥有的(不工作):
RoundsTable.propTypes = {
rounds: PropTypes.shape({
PropTypes.arrayOf(PropTypes.shape({
date: PropTypes.number.isRequired,
arena: PropTypes.string.isRequired,
scoreHome: PropTypes.number.isRequired,
scoreAway: PropTypes.number.isRequired,
teamHome: PropTypes.string.isRequired,
teamAway: PropTypes.string.isRequired,
spectators: PropTypes.number.isRequired
}).isRequired).isRequired
}).isRequired
}
我不确定如何指定包含对象数组的数字。是我这边的数据设计问题还是有指定这些道具的简单解决方案?
这是一个数据设计问题。您正在使用 Object
作为数组。例如,如果您相应地更改数据,这将起作用:
RoundsTable.propTypes = {
rounds: PropTypes.arrayOf(PropTypes.shape({
date: PropTypes.number.isRequired,
arena: PropTypes.string.isRequired,
scoreHome: PropTypes.number.isRequired,
scoreAway: PropTypes.number.isRequired,
teamHome: PropTypes.string.isRequired,
teamAway: PropTypes.string.isRequired,
spectators: PropTypes.number.isRequired
}).isRequired).isRequired
}
数据如下所示:
rounds: [
{
date: 1429354800000,
arena: 'Arena name',
scoreHome: 3,
scoreAway: 2,
teamHome: 'Home team name',
teamAway: 'Away team name',
spectators: 10
},
{...}
]
您丢失了索引,但数组已有这些索引。如果你想要更多类似地图的功能,你需要决定使用哪种地图,并将你的 PropTypes 建立在它的基础上。 Javascript 没有本地地图,虽然人们经常使用 Object
来达到同样的目的,但它有很多限制,比如你有 运行 的地图。
我正在尝试为我的一个 React 组件指定 PropTypes,但 运行 遇到了一些问题。我试图描述的对象将如下所示(数组将包含多个对象):
rounds: {
1: [
{
date: 1429354800000,
arena: 'Arena name',
scoreHome: 3,
scoreAway: 2,
teamHome: 'Home team name',
teamAway: 'Away team name',
spectators: 10
}
]
}
提前不知道会有多少轮。所以我可以得到
rounds: { 1: [..], 2: [..], 3: [..] }
这是我目前拥有的(不工作):
RoundsTable.propTypes = {
rounds: PropTypes.shape({
PropTypes.arrayOf(PropTypes.shape({
date: PropTypes.number.isRequired,
arena: PropTypes.string.isRequired,
scoreHome: PropTypes.number.isRequired,
scoreAway: PropTypes.number.isRequired,
teamHome: PropTypes.string.isRequired,
teamAway: PropTypes.string.isRequired,
spectators: PropTypes.number.isRequired
}).isRequired).isRequired
}).isRequired
}
我不确定如何指定包含对象数组的数字。是我这边的数据设计问题还是有指定这些道具的简单解决方案?
这是一个数据设计问题。您正在使用 Object
作为数组。例如,如果您相应地更改数据,这将起作用:
RoundsTable.propTypes = {
rounds: PropTypes.arrayOf(PropTypes.shape({
date: PropTypes.number.isRequired,
arena: PropTypes.string.isRequired,
scoreHome: PropTypes.number.isRequired,
scoreAway: PropTypes.number.isRequired,
teamHome: PropTypes.string.isRequired,
teamAway: PropTypes.string.isRequired,
spectators: PropTypes.number.isRequired
}).isRequired).isRequired
}
数据如下所示:
rounds: [
{
date: 1429354800000,
arena: 'Arena name',
scoreHome: 3,
scoreAway: 2,
teamHome: 'Home team name',
teamAway: 'Away team name',
spectators: 10
},
{...}
]
您丢失了索引,但数组已有这些索引。如果你想要更多类似地图的功能,你需要决定使用哪种地图,并将你的 PropTypes 建立在它的基础上。 Javascript 没有本地地图,虽然人们经常使用 Object
来达到同样的目的,但它有很多限制,比如你有 运行 的地图。