javascript - 将文本字段输入从子组件传递给父组件

标签 javascript reactjs

我正在创建一个简单的应用程序来进一步测试我对 React 和 Node.js 的了解。目前,我有一个包含属于子组件 (FormText.js) 的文本字段的应用程序;但是,我希望将用户在这些文本字段中输入的信息传输到父组件 (DummyForm.js) 以放入状态对象中。这必须在 DummyForm.js 文件中完成,因为我有其他类似的组件需要使用它们来执行此操作,这些组件将全部路由回 DummyForm.js,因此我可以使用 Node.js 将这个有状态对象上传到 MongoDB。我不太清楚该怎么做。下面是我正在使用的一些 React 代码:

DummyForm.js

import React, { useState } from "react";
import ReactDOM from "react-dom";
import FormText from "./FormText";

const DummyForm = () => {
//I want the information from each of my child component to go in each 'textField' property respectively
    const [textFields, setTextFields] = useState({
        textField1: "",
        textField2: "",
        textField3: "",
        textField4: "",
    });

    return (
        <div>
          <div>
            <FormText text='Placeholder1'/>
            <FormText text='Placeholder2' />
            <FormText text='Placeholder3' />
            <FormText text='Placeholder4' />
          </div>
        </div>
    );
};

let renderedForm = () => {
    ReactDOM.render(<DummyForm />, document.getElementById("root"));
};

export { renderedForm };

FormText.js

import React, { useState } from "react";
import { makeStyles } from "@material-ui/core/styles";
import TextField from "@material-ui/core/TextField";

const useStyles = makeStyles({
    boxWrapper: {
        padding: "20px 0 10px 0",
    },
});

const FormText = (props) => {

    const classes = useStyles();

    const handleChange = (e) => {
        console.log(e.target.value);
    };
    return (
        <div className={classes.boxWrapper}>
            <TextField
                id='outlined-textarea'
                label={props.text}
                multiline
                variant='outlined'
                fullWidth
                color='secondary'
                onChange={handleChange}
            />
        </div>
    );
};

export default FormText;

我很感激能得到的任何帮助。谢谢

最佳答案

这里你想要的是一个Controlled Component .以您的代码为例:

DummyForm.js

import React, { useState } from "react";
import ReactDOM from "react-dom";
import FormText from "./FormText";

const DummyForm = () => {
  //I want the information from each of my child component to go in each 'textField' property respectively
  const [textFields, setTextFields] = useState({
    textField1: "",
    textField2: "",
    textField3: "",
    textField4: "",
  });

  const handleTextChange = (e) =>
    setTextFields({
      ...textFields,
      [e.currentTarget.name]: e.currentTarget.value,
    });

  return (
    <div>
      <div>
        <FormText
          text="Placeholder1"
          name="textField1"
          onChange={handleTextChange}
        />
        <FormText
          text="Placeholder2"
          name="textField2"
          onChange={handleTextChange}
        />
        <FormText
          text="Placeholder3"
          name="textField3"
          onChange={handleTextChange}
        />
        <FormText
          text="Placeholder4"
          name="textField4"
          onChange={handleTextChange}
        />
      </div>
    </div>
  );
};

let renderedForm = () => {
  ReactDOM.render(<DummyForm />, document.getElementById("root"));
};

export { renderedForm };

FormText.js

import React, { useState } from "react";
import { makeStyles } from "@material-ui/core/styles";
import TextField from "@material-ui/core/TextField";

const useStyles = makeStyles({
  boxWrapper: {
    padding: "20px 0 10px 0",
  },
});

const FormText = (props) => {
  const classes = useStyles();

  return (
    <div className={classes.boxWrapper}>
      <TextField
        id="outlined-textarea"
        label={props.text}
        multiline
        variant="outlined"
        fullWidth
        color="secondary"
        onChange={this.props.onChange}
        name={this.props.name}
      />
    </div>
  );
};

export default FormText;

关于javascript - 将文本字段输入从子组件传递给父组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61963321/

相关文章:

javascript - 在其焦点区域外单击时弹出框不关闭

javascript - 如何设置相对于祖 parent 元素而不是直接父元素的宽度?

reactjs - 在客户端和服务器端渲染不同的组件

reactjs - react - 类型错误 : baseReducer is not a function

javascript - 如何获取HH :MM:SS difference using milliseconds in javascript?

javascript - 在React中读取Firestore子集合数据-如何在查询的子集合中设置父ID

javascript - 在表 JQuery 上搜索

javascript - native react : `this.state` 在 `render` 中未定义

javascript - 无法加载资源 : the server responded with a status of 400 (Bad Request) Spring JS call to Controller not working

reactjs - react - 警告 : Use the `defaultValue` or `value` props on <select> instead of setting `selected` on <option>