将多个引用从子组件传递到父组件-Reactjs

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将多个引用从子组件传递到父组件-Reactjs相关的知识,希望对你有一定的参考价值。

我有两个组成部分,Edit(子级)和Index(父级)。Edit组件中有三个输入框,我想要:

  1. 将这三个引用传递给Index组件

  2. 比较通过引用获得的这些输入(特别是在HandleUpdate函数中)

Edit.js

<form onSubmit=props.handleUpdate>
        <input 
            className=""
            name="name" 
            ref=props.setRef                          
            onChange=props.handleChange
            defaultValue= props.name /> 
        <input 
            className=""
            type="number" 
            name="day"
            min="1" 
            max="31"
            ref=props.setRef
            onChange=props.handleChange
            defaultValue= props.day  />
        <input 
            className=""
            name="dob"
            type="month"    
            ref=props.setRef                          
            onChange=props.handleChange
            defaultValue=props.dob />

Index.js

class BirthdaylistKeeper extends React.Component
    constructor(props)
        super(props);
   //state

...
handleUpdate(event)
        event.preventDefault(); 
            //if((name.value === "") && (dob.value === "") && (day.value === ""))
            //  console.log("empty");
            //

            const item = this.state.currentItem;
            let index = this.state.items.indexOf(item);
            const newItemList = [...this.state.items];
            newItemList.splice(index, 1, this.state.dataEdited);

            this.setState( 
                items: [...newItemList],
                toggle: false 
            );

       
//...
render()
        return(
            ...
                <Entry
                    name=this.state.name
                    day=this.state.day
                    dob=this.state.dob
                    onChange=this.handleChange
                    onSubmit=this.handleSubmit 
                    setRef=this.setRef /> 

)

我该如何实现?

答案

我有一个主意,不是将refs从子代传递到父代,而是在父代中创建ref并将它们传递给子代组件,然后将它们分配给每个输入元素,类似于以下代码:]

父组件:

import React,  Component, createRef  from 'react';

class BirthdaylistKeeper extends Component
  constructor(props) 
    super(props);

    this.nameRef = createRef();
    this.dayRef = createRef();
    this.dobRef = createRef();

   //state
  

  ~~~

  render() 
    return(

      ~~~

      <Entry
        nameRef=this.nameRef
        dayRef=this.dayRef
        dobRef=this.dobRef
  

并且在子组件中,将每个引用传递到相关的输入元素:

<form onSubmit=props.handleUpdate>
  <input
    ~~~
    name="name"
    ~~~
    ref=props.nameRef
    ~~~
  /> 
  <input
    ~~~
    name="day"
    ~~~
    ref=props.dayRef
    ~~~
  />
  <input
    ~~~
    name="dob"
    ~~~
    ref=props.dobRef
    ~~~
  />

此外,请记住,您应该为每个输入元素使用分隔的ref,而不是全部使用一个。

以上是关于将多个引用从子组件传递到父组件-Reactjs的主要内容,如果未能解决你的问题,请参考以下文章

如何使用双向数据绑定将数据从子组件传递到父组件?

将数据从子组件传递到父组件Angular4

React Hooks - 如何将道具从子组件传递到父组件?

如何将数据从子组件传递到父组件[Angular]

将数据从子功能组件传递到父组件 - React/Typescript

使用 Vue.js 将信息从子组件传递到父组件