Reactで親要素が子要素の値を取得する方法について

概要

Propsを介して値を渡す

描画コンポーネントで子コンポーネントに値をpropsとして渡すことができる。
これにより、親コンポーネントが子コンポーネントの値にアクセスできるようになる。

親コンポーネント

import React, { useState } from 'react';
import ChildComponent from './ChildComponent';
 
function ParentComponent() {
  const [childValue, setChildValue] = useState('');
 
  const handleChildValueChange = (value) => {
    setChildValue(value);
  };
 
  return (
    <div>
      <ChildComponent onValueChange={handleChildValueChange} />
      <p>子コンポーネントの値: {childValue}</p>
    </div>
  );
}
 
export default ParentComponent;
 

子コンポーネント

import React, { useState } from 'react';
 
function ChildComponent({ onValueChange }) {
  const [value, setValue] = useState('');
 
  const handleChange = (e) => {
    const newValue = e.target.value;
    setValue(newValue);
    onValueChange(newValue);
  };
 
  return (
    <div>
      <input type="text" value={value} onChange={handleChange} />
    </div>
  );
}
 
export default ChildComponent;
 

上記のコードでは、onValueChangeプロップを使用して、子コンポーネントでの値の変更を親コンポーネントに通知している。

ReactのuseRefフックを使用する

useRefフックを使用して、親コンポーネントから子コンポーネントに参照を渡し、子コンポーネントの値にアクセスすることが出来る。
ただし、useRefを使う場合、通常は非制御コンポーネントを扱う必要がある。

親コンポーネント

import React, { useRef } from 'react';
import ChildComponent from './ChildComponent';
 
function ParentComponent() {
  const childValueRef = useRef();
 
  const handleChildValueChange = () => {
    console.log('子コンポーネントの値:', childValueRef.current.value);
  };
 
  return (
    <div>
      <ChildComponent childValueRef={childValueRef} onValueChange={handleChildValueChange} />
    </div>
  );
}
 
export default ParentComponent;
 

子コンポーネント

import React from 'react';
 
function ChildComponent({ childValueRef, onValueChange }) {
  const handleChange = (e) => {
    childValueRef.current.value = e.target.value;
    onValueChange();
  };
 
  return (
    <div>
      <input type="text" onChange={handleChange} />
    </div>
  );
}
 
export default ChildComponent;
 

上記の例では、useRefを使用してchildValueRefを親から子に渡し、子コンポーネントの値にアクセスしている。
この方法は通常、非制御コンポーネントを取り扱うときに役立つ。