Javascript React原生w/D3JS的流图。需要将所有区域合并为一个区域。迭代不起作用

Javascript React原生w/D3JS的流图。需要将所有区域合并为一个区域。迭代不起作用,javascript,react-native,d3.js,Javascript,React Native,D3.js,我们正在尝试在React Native中创建此流图: 这是我想从下面创建系列的数据: const data = [ { time: 1, travel: 1000, politics: 734, sports: 782, business: 655, technology: 745, fashion: 353, society: 430, shopping: 228, science: 239, spirituality: 274, realestate: 236, pets: 1

我们正在尝试在React Native中创建此流图:

这是我想从下面创建系列的数据:

const data = [
  {
    time: 1, travel: 1000, politics: 734, sports: 782, business: 655, technology: 745, fashion: 353, society: 430, shopping: 228, science: 239, spirituality: 274, realestate: 236, pets: 125, news: 154, homeandgarden: 19, hobbies: 89, healthfitness: 236, food: 154, finance: 19, familyparenting: 125, education:  236, career: 274, cars: 239, entertainment: 353
  },
  {
    time: 2, travel: 1023, politics: 694, sports: 779, business: 587, technology: 812, fashion: 349, society: 409, shopping: 240, science: 262, spirituality: 232, realestate: 223, pets: 112, news: 173, homeandgarden: 25, hobbies: 45, healthfitness: 223, food: 173, finance: 25, familyparenting: 112, education:  223, career: 232, cars: 262, entertainment: 349
  },
  {
    time: 3, travel: 983, politics: 739, sports: 789, business: 623, technology: 669, fashion: 381, society: 311, shopping: 226, science: 213, spirituality: 247, realestate: 192, pets: 140, news: 152, homeandgarden: 17, hobbies: 56, healthfitness: 192, food: 152, finance: 17, familyparenting: 140, education:  192, career: 247, cars: 213, entertainment: 381
  },
.
.
.
.
];

这是下面系列(片段)的实际创建

以此类推,我们制作了12个区域,代表一天12小时内的12个切片

我们用这个颜色fn给切片上色

  const color = d3.scale.scaleOrdinal()
    .domain(series)
    .range(d3.chromatic.schemeAccent)
然后我们使用12个路径组件来渲染该区域


export default class App extends React.Component {
  render() {
    return (
    <SafeAreaView style={styles.root}>
      <View style={styles.container}>
        <Svg{...{width, height}}>
          <Path d = {area1} fill={z(Math.random())}/>
          <Path d = {area2} fill={z(Math.random())}/>
          <Path d = {area3} fill={z(Math.random())}/>
          <Path d = {area4} fill={z(Math.random())}/>
          <Path d = {area5} fill={z(Math.random())}/>
          <Path d = {area6} fill={z(Math.random())}/>
          <Path d = {area7} fill={z(Math.random())}/>
          <Path d = {area8} fill={z(Math.random())}/>
          <Path d = {area9} fill={z(Math.random())}/>
          <Path d = {area10} fill={z(Math.random())}/>
          <Path d = {area11} fill={z(Math.random())}/>
          <Path d = {area12} fill={z(Math.random())}/>

        </Svg>
      </View>
    </SafeAreaView>

  )
  }
}


导出默认类App扩展React.Component{
render(){
返回(
)
}
}
结果是这样的:


我们如何创建一个组件来渲染相同的图像?我们尝试了许多不同的迭代方法,但都没有成功。我们已经花了将近一周的时间在这上面了。如果能找到更可行的解决方案,我们将不胜感激

您希望在react native中重新创建此图表的原因是什么?我建议您保留d3.js代码本身,不要用多个react组件或模板构建图表。而是使用普通的es6或typescript类来拆分代码。它将使您的调用堆栈保持较短,开发人员也会这样说。将前端框架引入其中,将不必要地使图表不同部分之间的开发、测试、调试和通信复杂化。我是凭经验说的。嘿,谢谢你的及时回复。我们怎么做?我们将D3JS代码放在哪里,如何将其称为react native?将完整的图表放在单个react组件中。用react创建一个最小的容器,剩下的就让d3.js来做。您可以使用自定义挂钩来引入d3js。

export default class App extends React.Component {
  render() {
    return (
    <SafeAreaView style={styles.root}>
      <View style={styles.container}>
        <Svg{...{width, height}}>
          <Path d = {area1} fill={z(Math.random())}/>
          <Path d = {area2} fill={z(Math.random())}/>
          <Path d = {area3} fill={z(Math.random())}/>
          <Path d = {area4} fill={z(Math.random())}/>
          <Path d = {area5} fill={z(Math.random())}/>
          <Path d = {area6} fill={z(Math.random())}/>
          <Path d = {area7} fill={z(Math.random())}/>
          <Path d = {area8} fill={z(Math.random())}/>
          <Path d = {area9} fill={z(Math.random())}/>
          <Path d = {area10} fill={z(Math.random())}/>
          <Path d = {area11} fill={z(Math.random())}/>
          <Path d = {area12} fill={z(Math.random())}/>

        </Svg>
      </View>
    </SafeAreaView>

  )
  }
}