【问题标题】:Can I export data to another react component?我可以将数据导出到另一个反应组件吗?
【发布时间】:2017-01-25 08:59:12
【问题描述】:

我得到redux值在Data.js中创建一个新数组,我想用新的数组数据在Chart.js中绘制图表

所以...

如何将 data_pie 传递给Chart.js 我可以在Data.js 中导出data_pie 吗?

有一个react组件来获取数据

//Chart.js

import ChartBar from './ChartBar.js';
import Data from './Data.js';

export default class Chart extends Component{   
render(){
        return
            <div className="chart">
              <ChartBar data={Data}/>
            </div>
        );   
    } }

并且在 data.js 中从 redux 中获得一些价值

//Data.js
import React,{ Component } from 'react'
import { connect } from 'react-redux';
import raws from './another.json';

function filter_pie(apple,lemon){
   //...put raws and redux together to filter some array we need
  }
  return [newArray,pieName]
}

class Data extends Component {
  render () {
    const { props: { apple, lemon } } = this
    let data_pie = filter_pie( apple, lemon )
    return(
      <div>
        {data_pie} //can I put the data in there ? or I don't need to write any return in this js?
      </div>
    )
  }
}

function mapStateToProps(state) {
  return {
    apple:state.apple,
    lemon:state.lemon,

  };
}

export default connect(mapStateToProps)(Data);

我不知道如何将数组 data_pie 传递给 chart.js

【问题讨论】:

  • 如果您的Data.js 纯粹用于数据操作。将Chart.js 作为子项导入Data.js,并将pie_data 作为props 发送到图表
  • @JyothiBabuAraja 这个方法我知道,但是我想把函数组件和图表组件切分清楚。你有什么好主意吗?谢谢!
  • 其实,没有什么叫function component。组件适用于DOM 元素。这些功能在其他地方实现,例如utils 来操作数据。我们在props 上使用这些函数,然后传递给components,即reducer 级别本身。
  • 所以...我的逻辑错了?我无法将数据导出到另一个组件,只能像你说的那样使用props 将数据发送给孩子
  • 我认为你不能从组件中导出数据,除非你有一个事件来触发父 function。您的方法可能不适合执行此操作。最好使用propsChart.js

标签: javascript arrays function reactjs


【解决方案1】:

如果在 Data.js 中操作数据,则应使用 action 和 reducer 将其保存到 redux 存储中。

当您将数据存储到 redux 存储时,只需在 Chart.js 周围创建另一个容器组件并为图表使用 mapStateToProps()。

【讨论】:

    【解决方案2】:

    是的,您可以将数据直接传递给另一个组件,我假设您的减速器部分工作正常,并且您在 data.js 中获取数据,这就是您的代码的样子

    //Chart.js
    import React, { Component } from 'react';
    import PropTypes from "prop-types";
    
    import ChartBar from './ChartBar.js';
    //import Data from './Data.js';  //No need to import here
    
    export default class Chart extends Component{   
        static propsTypes = {
            data: PropTypes.array.isRequired
        };
    
        render(){
            return
                <div className="chart">
                  <ChartBar data={this.props.data}/>
                </div>
            );   
        } 
    }
    

    您的数据文件将如下所示,

    //Data.js
    import React,{ Component } from 'react'
    import { connect } from 'react-redux';
    import raws from './another.json';
    
    import Chart from './Chart'; //fix the path to Chart.js if that file is not in same folder.
    
    function filter_pie(apple,lemon){
       //...put raws and redux together to filter some array we need
      }
      return [newArray,pieName]
    }
    
    class Data extends Component {
      render () {
        const { props: { apple, lemon } } = this
        let data_pie = filter_pie( apple, lemon )
        return(
          <div>
            { //data_pie}
            { //instead use <Chart /> here and pass data_pie as prop }
            <Chart data={data_pie} />
          </div>
        )
      }
    }
    
    function mapStateToProps(state) {
      return {
        apple:state.apple,
        lemon:state.lemon,
    
      };
    }
    
    export default connect(mapStateToProps)(Data);
    

    【讨论】:

    • 另一种方法是使用 redux,保存 data_pie 以在 Chart.js 上存储和获取此数据,但这是一种昂贵的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-21
    • 1970-01-01
    • 2015-09-28
    • 2019-07-05
    • 1970-01-01
    • 2010-12-29
    • 2022-09-28
    相关资源
    最近更新 更多