В настоящее время я ищу способ доступа к дочерним элементам state
из родительского компонента, который будет обрабатывать вызовы API для всей страницы.
Фактическая проблема заключается в следующем:
Parent
является родительским компонентом, который будет отображать два Child
компонента.
Каждый из Child
имеет состояние, за которое он отвечает.
Кнопка «Вид отправки»будет иметь «Вид действия Submmit» (это все указано, потому что это не форма), и это должно вызывать функцию для предоставления доступа к состоянию детей.Есть ли способ (некоторая особенность React) сделать это без использования <form>
или без создания промежуточного родительского компонента для хранения всего состояния?Я хочу, чтобы каждый ребенок отвечал за свое государство.
Код Песочница с примером кода ниже
import React, { useState, useRef } from "react";
function ChildOne() {
const [childOneState, setChildOneState] = useState(false);
return (
<React.Fragment>
<h3>Child One</h3>
<p>My state is: {childOneState.toString()}</p>
<button onClick={() => setChildOneState(true)}>Change my state</button>
</React.Fragment>
);
}
function ChildTwo() {
const [childTwoState, setChildTwoState] = useState(false);
return (
<React.Fragment>
<h3>Child Two</h3>
<p>My state is: {childTwoState.toString()}</p>
<button onClick={() => setChildTwoState(true)}>Change my state</button>
</React.Fragment>
);
}
function Button(props) {
return (
<button onClick={props.kindOfSubmitAction}>Kind of Submit Button</button>
);
}
function Parent() {
const childOneState = useRef("i have no idea");
const childTwoState = useRef("ihave no idea");
function kindOfSubmitAction() {
console.log("This is the kindOfSubmit function!");
// This function would somehow get
// access to the children state and store them into the refs
return;
}
return (
<React.Fragment>
<h1>Iam Parent</h1>
<div>
<b>Child one state is: </b>
{childOneState.current}
</div>
<div>
<b>Child two state is: </b>
{childTwoState.current}{" "}
</div>
<Button kindOfSubmitAction={kindOfSubmitAction} />
<ChildOne />
<ChildTwo />
</React.Fragment>
);
}
export default Parent;