Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.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
呈现列表-React-Javascript_Javascript_Reactjs - Fatal编程技术网

呈现列表-React-Javascript

呈现列表-React-Javascript,javascript,reactjs,Javascript,Reactjs,我目前正在尝试呈现状态 我看到在map循环中声明变量时出现了一些错误 这是我迄今为止的尝试,欢迎任何帮助 import React from "react"; import axios from "axios"; const transformHumanReadableDateToMessages = date => { let d = new Date(date); const days = [ "Sunday", "Monday", "Tuesday"

我目前正在尝试呈现状态

我看到在map循环中声明变量时出现了一些错误

这是我迄今为止的尝试,欢迎任何帮助

import React from "react";
import axios from "axios";

const transformHumanReadableDateToMessages = date => {
  let d = new Date(date);
  const days = [
    "Sunday",
    "Monday",
    "Tuesday",
    "Wednesday",
    "Thursday",
    "Friday",
    "Saturday"
  ];
  return {
    DayOfTheWeek: d.getDate(),
    Month: d.getMonth(),
    Day: days[d.getDay()],
    YearAtTime: d.getFullYear()
  };
};

export default class App extends React.Component {
  state = {
    messages: []
  };

  componentDidMount() {

    axios.get(`https://api.myjson.com/bins/10xva4`).then(res => {
      let result = res.data["messages"];
          result = Array.from(new Set(result.map(e => JSON.stringify(e))));
          result.reduce((accu, curr) => {
           curr.date = transformHumanReadableDateToMessages(curr["sentAt"]);
            accu.push(curr)
            return accu;
          }, []);

      this.setState({
        messages: result
      });
    });
  }

  render() {
return (
  <>
    { this.state.messages.map(message => 
       let d = new Date(date);
      const days = [
        "Sunday",
        "Monday",
        "Tuesday",
        "Wednesday",
        "Thursday",
        "Friday",
        "Saturday"
      ];
     <div className="container">
     <p>{message.content}<p/>
     <p>{message.senderUuid}</p>
     <p>DayOfTheWeek: {d.getDate()}
     <p>Month: {d.getMonth()}</p>
     <p>Day: {days[d.getDay()]}</p>
     <p>Year: {d.getFullYear()} </p>
     </div>
     )}
  </>
);
我希望使日期更具可读性,然后将其添加到元素中以获得如下输出:

{
  "sentAt":"2012-11-13T17:29:37.003Z",
  "uuid": "435453",
  "content": "1",
  "senderUuid": "2"
 }
{
 "sentAt":"2012-11-13T17:29:37.003Z",
 "uuid": "435453",
 "content": "1",
 "senderUuid": "2",
 "DayOfTheWeek": 22,
  "Month": 4,
  "Day": 'Friday',
  "YearAtTime": 2015
 }

这是因为由于对括号的管理不当,您正在交替使用let和jsx。因为它很混乱,我用codesandbox和React钩子重写了它


我可以说你需要正确理解映射函数。 还有,如何处理JSX内部的逻辑

首先,需要在map函数中添加return函数。 只要不返回地图中的所有内容 函数,则不会渲染任何内容。 其次,您需要在返回函数外部拆分变量赋值。 因此,返回内部映射函数将只包含JSX元素。 其他逻辑将在返回函数体之外。请拿 请看下面的代码。 第三,您还需要修复地图中标记的打字错误 功能。
{message.content}

为什么?这些信息直接来自sentAt和/或current date属性,为什么不在渲染过程中生成显示所需的值,这是创建用户看到的实际位的函数?例如,我想添加更多属性,因为以后我想有一个按钮,使用sentAt值按升序或降序对日期进行排序,而不是在呈现sate@Mike'Pomax'kamermansook时试图依赖另一个函数或处理程序,但是。。。这有什么关系?如果按sentAt排序,渲染中的实际代码仍将生成相同的派生值。排序使用setState和render对不在render中的消息数组进行重新排序,然后根据更新的this.state.messages数组盲目地重新生成UI。这就是React的工作原理:您根据用户操作更新状态,并根据更新的状态呈现您的UI。@Mike'Pomax'Kamermans好的,我更新了问题和代码,但仍然看到错误错误是什么?代码似乎无法工作当前错误应用程序…:呈现未返回任何内容。这通常意味着缺少返回语句。或者,要不呈现任何内容,请返回null。

import React, { useState, useEffect } from "react";
import axios from "axios";
import "./styles.css";

const days = [
  "Sunday",
  "Monday",
  "Tuesday",
  "Wednesday",
  "Thursday",
  "Friday",
  "Saturday"
];
export default function App() {
  const [messages, setMessages] = useState([]);
  useEffect(() => {
    axios
      .get(`https://api.myjson.com/bins/10xva4`)
      .then(({ data: { messages } }) => setMessages(messages));
  }, []);
  const Display = messages.map(({ content, senderUuid, sentAt }, index) => {
    let d = new Date(sentAt);
    return (
      <div className="container" key={index}>
        <p>Content: {content}</p>
        <p>SenderUuid: {senderUuid}</p>
        <p>DayOfTheWeek: {d.getDate()}</p>
        <p>Month: {d.getMonth()}</p>
        <p>Day: {days[d.getDay()]}</p>
        <p>Year: {d.getFullYear()}</p>
      </div>
    );
  });
  // console.log({ messages });
  return <div className="App">{Display}</div>;
}
import React from "react";
import "./styles.css";

 export default class App extends React.Component {
   state = {
    messages: []
   };

  componentDidMount() {
    //... your api call here
  }

render() {
  const { messages } = this.state;

  if (messages.length === 0) {
    return <p>No Message Found</p>;
  }

  messages.map(message => {
    let d = new Date();
    const days = [
      "Sunday",
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday"
    ];

    return (
      <div className="container">
        <p>{message.content}</p>
        <p>{message.senderUuid}</p>
        <p>DayOfTheWeek: {d.getDate()}</p>
        <p>Month: {d.getMonth()}</p>
        <p>Day: {days[d.getDay()]}</p>
        <p>Year: {d.getFullYear()} </p>
      </div>
    );
  });
}