Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 无法从特定对象检索值_Reactjs_Apexcharts - Fatal编程技术网

Reactjs 无法从特定对象检索值

Reactjs 无法从特定对象检索值,reactjs,apexcharts,Reactjs,Apexcharts,我是apexchart和reactjs的新手,不知道如何根据特定月份的消息数量显示序列,而不是提供静态数据。我已浏览此链接“”,但无法正确放置逻辑 这是代码 import React,{Component}来自“React”; 从“react apexcharts”导入图表; 从“./constants/constant”导入{messages}; 类甜甜圈扩展组件{ 构造函数(){ 超级(); } componentDidMount(){ 取回(“https://jsonplaceholder

我是apexchart和reactjs的新手,不知道如何根据特定月份的消息数量显示序列,而不是提供静态数据。我已浏览此链接“”,但无法正确放置逻辑

这是代码

import React,{Component}来自“React”;
从“react apexcharts”导入图表;
从“./constants/constant”导入{messages};
类甜甜圈扩展组件{
构造函数(){
超级();
}
componentDidMount(){
取回(“https://jsonplaceholder.typicode.com/todos/1")
.then(res=>res.json())
。然后(res=>{
//设置响应
//this.props.setMessages(messages);
//this.props.stareMessages();
控制台日志(“消息”,消息);
这是我的国家({
信息:信息
});
});
}
状态={
索引:0,
国旗:错,
信息:[],
选项:{
标签:[
“一月”,
“二月”,
“三月”,
“四月”,
“五月”,
“六月”,
“七月”,
“八月”,
“9月”,
“十月”,
“11月”,
“12月”
],
图表:{
身高:350,
输入:“酒吧”,
活动:{
dataPointSelection:(事件、图表上下文、配置)=>{
这是我的国家({
标签:chartContext.opts.labels,
百分比:chartContext.opts.series
});
const selectedData=messages.find(
x=>x.id==config.dataPointIndex+1
);
this.setState({flag:true,selectedData});
}
}
},
图例:{
位置:“底部”,
水平对齐:“中心”
}
},
系列:[44,55,41,17,15,50,79,46,78,96,78,100]
};
render(){
const{selectedData,options,series}=this.state;
返回(
{所选数据&&(
从…起
到
日期和时间
{selectedData.from}
{selectedData.to}
{selectedData.date}
)}
);
}
}
出口默认甜甜圈;

您可以使用momentjs解析日期格式

我很确定它可以被优化。我认为最好的优化是已经以正确的格式接收数据

const countEmailsByMonth = data => {
  const dates = data.map(datum =>
    moment(datum.date, ["DD-MM-YYYY"]).format("MMMM")
  );

  // getting our dates from your message json file 
  //and formatting them to display month

  const months = moment.months();
  // getting 12 months arr from moment.js

  const mergedMonths = [...months, ...dates];
  // merging months and dates together

  const sortedMonths = mergedMonths.sort(
    (a, b) => months.indexOf(a) - months.indexOf(b)
  );
  //sorting months
  const chartData = {};
  //counting duplicates
  sortedMonths.map(val => (chartData[val] = chartData[val] + 1 || 0));
  return chartData;
};

这里是到

Hi的链接,在我的代码中,我已经使用了constant.js文件,并且还使用了inblx组件的相应文件。基于日期,它应该计算序列(特定月份的日期数)。如果我理解正确,您的数据由未排序的消息组成,您希望按日期(或月份)对这些消息进行排序,并显示在图表中(例如,标签:一月,序列:60毫秒)。是的,您是正确的。。。标签:月份和系列:每个月的电子邮件数量取决于我看到的日期,所以你在按月计算电子邮件时遇到困难?这就是你想要实现的吗?@MikeRos-是的,非常感谢你的帮助。工作正常:)np chandan,我将根据^^编辑答案codesandbox@MikeRos-你好,Mike,我在代码中有一个查询,序列中有静态值(第55行),我们可以将其设置为类似于标签吗。“我是说以动态的方式?”米克罗斯-谢谢,现在我明白了。在表中,我们可以根据各自的月份显示电子邮件的数量。我的意思是如果我们一月份有两条消息。然后它将在表中显示列表(2行)。我们能在表中显示百分比而不是从表中显示百分比吗?
const countEmailsByMonth = data => {
  const dates = data.map(datum =>
    moment(datum.date, ["DD-MM-YYYY"]).format("MMMM")
  );

  // getting our dates from your message json file 
  //and formatting them to display month

  const months = moment.months();
  // getting 12 months arr from moment.js

  const mergedMonths = [...months, ...dates];
  // merging months and dates together

  const sortedMonths = mergedMonths.sort(
    (a, b) => months.indexOf(a) - months.indexOf(b)
  );
  //sorting months
  const chartData = {};
  //counting duplicates
  sortedMonths.map(val => (chartData[val] = chartData[val] + 1 || 0));
  return chartData;
};