当前位置: 首页 > 知识库问答 >
问题:

从类组件中反应功能组件中的访问值

张丁雷
2023-03-14

我正在使用一个名为React语义ui日期选择器的React模块,我相信它是基于React日期选择器的。不管怎样,这都是一个普通的问题。我的主类组件和日期选择器功能组件位于同一个文件中。日期选择器呈现并工作正常,但我不知道如何在主类组件中访问日期选择器的实际值。

代码的简化版本可以在下面看到,我只是控制台日志记录了几个变量的值。有人能给我一个建议,告诉我从类组件中访问所选日期选择器值的最佳方式吗?

import Layout from '../../components/Layout';
import React, { Component, useState } from 'react';
import SemanticDatepicker from 'react-semantic-ui-datepickers';
import { Message, Form, Icon, Button, Input } from 'semantic-ui-react';
import 'react-semantic-ui-datepickers/dist/react-semantic-ui-datepickers.css';

class MyForm extends Component {
  state = {
    colour: 'Black',
    description: ''
  };

  onSubmit = async (event) => {
    event.preventDefault();

    console.log(this.state.colour); // Shows current colour field value.
    console.log(this.state.description); // Shows current description field value.
    console.log(); // How do I access the selected value of the date picker field??
  };

  render()  {
    return (
      <Layout>
        <Form onSubmit={this.onSubmit}>
          <Form.Field>
            <Form.Group>
            <Form.Field control='select' value={this.state.colour} onChange={event => this.setState({ colour: event.target.value })}>
              <option value='Black'>Black</option>
              <option value='Blue'>Blue</option>
              <option value='Green'>Green</option>
              <option value='Orange'>Orange</option>
            </Form.Field>
            <DatePicker />
            </Form.Group>
            <label>Description</label>
            <Form.TextArea value={this.state.description} onChange={event => this.setState({ description: event.target.value })} />
          </Form.Field>
          <Button icon='add' labelPosition='left' content='Add' primary />
        </Form>
      </Layout>
    );
  }
}

const DatePicker = () => {
  const [endDate, setNewDate] = useState(null);
  const onChange = (event, data) => setNewDate(data.value);

  return <SemanticDatepicker onChange={onChange} />;
};

export default MyForm;

共有1个答案

江曦
2023-03-14

您需要将日期选择器的状态提升到需要它的位置,即MyForm组件中。

然后,MyForm组件应该将一个onChange处理程序作为道具传递给DatePicker组件,该组件反过来将其传递给SemanticDatePicker-作为附带说明,您可能不需要DatePicker组件不再存在,因为它变成了SemanticDatePicker的空包装器。无论如何,当onChange处理程序被SemanticDatePicker调用时,它实际上会写入在MyForm级别声明的状态,然后您可以在MyForm的方法中安全地读取它。

从官方React文档中提升状态的部分是针对这个特定用例的。

 类似资料:
  • 问题内容: 我试图了解何时使用React功能组件和类,并从文档中阅读它们并没有真正详细介绍。当您希望类的特定功能构成组件时,能否给我下面的一些主要例子? 功能组件的功能较弱,但更简单,并且仅使用一个render()方法就类似于类组件。除非您需要仅在类中可用的功能,否则我们建议您改用功能组件。 问题答案: 您仅在以下情况下需要组件: 需要组件 状态 或 需要 生命周期方法 。例如等

  • 我目前有一个类组件和一个函数组件在我的主组件 以下是的代码段: 类组件 功能部件 因此,我想做的是通过按钮的onClick操作,从功能组件更改类组件的状态。我怎样才能完成任务?

  • 我是新的反应,我正在尝试组件功能的风格。我有简单的待办事项清单。我想使用style属性从列表中删除todo项。从Chrome调试模式中,我看不到对复选框更改的即时反应,而且该项也没有删除。。。对我来说,这是如何管理组件状态的问题。我希望得到一些指导。 App.js Todos.js TodoItem.js 我希望这个getStyle()将遵循状态。。。以某种方式

  • 问题内容: 我知道有时需要设置,尤其是在处理生产版本时。我想知道如何使用我的功能组件进行设置-是否可以/允许? 这是我在班级组件中得到的: 我如何在无状态组件中执行相同的操作? 问题答案: 说的文档 该字符串用于调试消息。通常,您不需要显式设置它,因为它是从定义组件的函数或类的名称推断出来的。如果要出于调试目的显示其他名称,或者在创建高阶组件时,可能需要显式设置它,有关详细信息,请参见包装显示名称

  • 我在学反应。我读过一篇文章,建议我们使用函数组件,而不是扩展react.component的类,所以我跟着做了。我也使用箭头函数而不是函数关键字。即: 有没有一种方法可以使用setState()来代替setName()、setId()、…等?或者任何建议? 非常感谢!

  • 问题内容: 我有一个关于React的问题(未覆盖时)。我确实更喜欢纯功能组件,但是即使prop / state不变,我也担心它每次都会更新。所以我正在考虑使用PureComponent类。 我的问题是:功能组件是否与PureComponents 具有相同的检查?还是每次都会更新? 问题答案: 在React中,功能组件是无状态的,并且它们没有生命周期方法。 无状态组件是一种编写React组件的优雅方