首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React js根据日期输入计算日期

问React js根据日期输入计算日期
EN

Stack Overflow用户
提问于 2021-01-08 08:28:24
回答 1查看 41关注 0票数 1

我花了一整天的时间来编写这个函数。我有一个react应用程序,我正在构建一个PERN堆栈。我有一个有很多日期输入的表单。我有两个日期列,然后是一个总天数列。我正在尝试获取用户输入,然后显示以天为单位的差异。

这是dateForm.js组件

代码语言:javascript
复制
import React, { useState } from 'react'

const DatesForm = () => {

     const [preliminaryStart, preliminaryEnd] = useState();
     const [preliminaryEnd, setFcbcToWitEnd] = useState();

     const diffDays = (s, e) => {
         if(s !== null) {
            start = new Date(s.value);
            end = new Date(e.value);
         return ((end - start) / (1000 * 60 * 60 * 24));
         }
         return '0';
     }

return (
    <>
        <div className="form-container">
            <form action="">
                <h1>Dates</h1>                
                <div className="row-nb">
                {/* Row 2 Column 1 */}
                    <h3 className="form-title-headers">PRELIMINARY REVIEW TIME</h3>
                    <div className="nbcol-3">
                        <div className="form-group">
                            <label htmlFor="preliminary-review-start">START</label>
                            <input type="date" className="form-control" id="preliminary-review-start"/>
                        </div>
                    </div>
                    {/* Row 2 Column 2 */}
                    <div className="nbcol-3">
                        <div className="form-group">
                            <label htmlFor="preliminary-review-end">END</label>
                            <input type="date" className="form-control" id="preliminary-review-end"/>
                        </div>
                    </div>
                    {/* Row 2 Column 3 */}
                    <div className="nbcol-3">
                        <div className="form-group">
                            <label htmlFor="total-time">TOTAL TIME IN STAGE</label>
                            <p className="total-time" id="preliminary-review-total">{diffDays(preliminaryStart, preliminaryEnd)}</p>
                        </div>
                    </div>
                </div>
    </>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-08 08:57:19

您正在声明状态,但从不更改它们,这意味着您的状态从一开始就是未定义的,并且无论用户输入是什么,您的状态都不会更改。另外,您的状态声明也是错误的。还有其他的错误,你可能应该复习一下js和react的基础知识。但不管怎样,这里的代码应该是有效的。

​

代码语言:javascript
复制
import React, { useState, useEffect } from "react";

const DatesForm = () => {
  const [preliminaryEnd, setPreliminaryEnd] = useState(null);
  const [preliminaryStart, setPreliminaryStart] = useState(null);
  const [timeDiff, setTimeDiff] = useState(0);

  useEffect(() => {
    if (preliminaryEnd !== null && preliminaryStart !== null) {
      let start = new Date(preliminaryEnd);
      let end = new Date(preliminaryStart);
      setTimeDiff((end - start) / (1000 * 60 * 60 * 24));
    }
  }, [preliminaryEnd, preliminaryStart]);
  return (
    <>
      <div className="form-container">
        <form action="">
          <h1>Dates</h1>
          <div className="row-nb">
            {/* Row 2 Column 1 */}
            <h3 className="form-title-headers">PRELIMINARY REVIEW TIME</h3>
            <div className="nbcol-3">
              <div className="form-group">
                <label htmlFor="preliminary-review-start">START</label>
                <input
                  type="date"
                  className="form-control"
                  id="preliminary-review-start"
                  onChange={(e) => setPreliminaryStart(e.target.value)}
                />
              </div>
            </div>
            {/* Row 2 Column 2 */}
            <div className="nbcol-3">
              <div className="form-group">
                <label htmlFor="preliminary-review-end">END</label>
                <input
                  type="date"
                  className="form-control"
                  id="preliminary-review-end"
                  onChange={(e) => setPreliminaryEnd(e.target.value)}
                />
              </div>
            </div>
            {/* Row 2 Column 3 */}
            <div className="nbcol-3">
              <div className="form-group">
                <label htmlFor="total-time">TOTAL TIME IN STAGE</label>
                <p className="total-time" id="preliminary-review-total">
                  {timeDiff}
                </p>
              </div>
            </div>
          </div>
        </form>
      </div>
    </>
  );
};

​

这里的沙箱:https://codesandbox.io/s/react-fix-83jw6?file=/src/index.js。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65621849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档