【React】子コンポーネントで値を操作し、親コンポーネントで条件付きレンダー
10306 ワード
全体のコード
pages/childToParent/index.tsx
import Parent from '../../components/childToParent/Parent'
export const App = () => {
return (
<>
<Parent />
</>
)
}
export default App
components/childToParent/Parent.tsx
import { useState } from 'react'
import Child from './Child'
export const Parent = () => {
const [animalName, setAnimalName] = useState('dog')
return (
<>
<div>animalName:{animalName}</div>
{animalName === `pig` && <div>子コンポーネントで`pig`を設定しました</div>}
<Child setAnimalName={setAnimalName} />
</>
)
}
export default Parent
components/childToParent/Child.tsx
import { useEffect } from 'react'
type Props = {
setAnimalName: React.Dispatch<React.SetStateAction<string>>
}
export const Child = ({ setAnimalName }: Props) => {
useEffect(() => {
const newAnimalName = `pig`
setAnimalName(newAnimalName)
}, [])
return <div>子コンポーネント</div>
}
export default Child
説明
Next.js + TypeScriptの環境で書いています。
ここで子コンポーネント Child
を呼び出すか否かで処理が変わります。
かなり簡略化したコードですが、
子要素の数に応じて親?のタイトルを変えるとか、
だいたい似たような処理でできます。
子コンポーネント Child
を呼び出さない場合
components/childToParent/Parent.tsx
{/* <Child setAnimalName={setAnimalName} />
useState初期値のままの値が入っている。
子コンポーネント Child
を呼び出す場合
components/childToParent/Parent.tsx
<Child setAnimalName={setAnimalName} />
子コンポーネントでstateの中身をいじったデータが入っている。
中身がpig
だった場合の条件付きレンダーも機能している。
Author And Source
この問題について(【React】子コンポーネントで値を操作し、親コンポーネントで条件付きレンダー), 我々は、より多くの情報をここで見つけました https://zenn.dev/dev63/articles/ae0f9f893dac64著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Collection and Share based on the CC protocol