Не могу передать значение из дочернего компонента в родительский
Сейчас я пытаюсь добиться следующего поведения: при выборе определенного человека, что бы он добавлялся в состояние selectedMentor. Сейчас selectedMentor хранит null.
Часть кода родительского компонента HourlyRates:
const HourlyRates = () => {
const [workers,setworkers] = useState(null)
const [mentorsFromMoodle, setMentorsFromMoodle] = useState(null)
const [modalActive,setModalActive] = useState(false)
const [selectedMentor, setSelectedMentor] = useState(null)
useEffect(()=>{
const handleSelectedMentor = (mentor) => {
console.log(mentor)
setSelectedMentor(mentor);
console.log("родитель")
console.log(selectedMentor)
};
return (
<>
<Modal active={modalActive} setModalActive={setModalActive}>
<div onClick={e=> e.stopPropagation()}>
<label for="cars">Choose a mentor:</label>
<select onChange={handleSelectedMentor} name="mentors" id="mentors-select">
{mentorsFromMoodle?.map((item,index) =>(
<ModalRow
key = {index}
index = {index}
item = {item}
onSelect = {handleSelectedMentor}
/>
) )
}
</select>
<button >add</button>
</div>
</Modal>
</>
)
}
export default HourlyRates;
Дочерний элемент ModalRow :
import React from 'react'
import axios from "axios";
import { useState,useEffect} from 'react'
const ModalRow = (props) => {
const handleMentorClick = () => {
console.log("работает")
const mentorName = props.item.firstname;
const mentorLastname = props.item.lastname;
const mentorEmail = props.item.email;
const mentor = {fname: mentorName, lname: mentorLastname, mentorEmail: mentorEmail };
props.onSelect(mentor)
};
return (
<option onChange={() => handleMentorClick()} className={"modalRowId-" + props.index} value={props.item.email}>{props.item.firstname} {props.item.lastname}</option>
)
}
export default ModalRow
Ответы (1 шт):
В HourlyRates <
Меняете тело функции на получение события onSelect и выбранного значения
const handleSelectedMentor = (event) => {
console.log(event.target.value)
setSelectedMentor(mentorsFromMoodle[event.target.value]);
console.log("родитель")
console.log(mentorsFromMoodle[event.target.value])
};
Удаляете onSelect из передачи в компонент ModalRow
<ModalRow
key={index}
index={index}
item={item}
/>
В компоненте ModalRow Удаляете функцию handleMentorClick и слушатель события onChange
В качестве value вместо value={props.item.email} задаем индекс элемента value={props.index}
<option className={"modalRowId-" + props.index} value={props.index}>{props.item.firstname} {props.item.lastname}</option>
И работает!
При смене options будет передан id индекса массива, по которому данные будут добавлены в переменную selectedMentor