Реагировать на выбор управления

У меня есть данные в файле с именем GlobalState.js, и я пытаюсь получить доступ к другому файлу с именем AddClass.js.

GlobalState.js

myclasses:[
     {
      "id":"class1",
      "name":"Maths",
      "students":["arun1","ashok1","rajesh1","mahesh1"],
      "teachers":["ramesh1","suresh1","ashwin1"]
     },
     {
      "id":"class2",
      "name":"Science",
      "students":["arun2","ashok2","rajesh2","mahesh2"],
      "teachers":["ramesh2","suresh2","ashwin2"]
    }
   ]

Я хочу, чтобы имена учеников отображались в моем элементе управления React-Select. Ниже приведен код, который я пробовал. Спасибо за поддержку.

AddClass.js

import React, {useState, useEffect, useContext } from 'react'
import { GlobalContext } from '../../context/GlobalState'
import { v4 as uuid } from "uuid";
import { useForm } from "react-hook-form";
import { Link, useHistory } from 'react-router-dom';
import Select from 'react-select'

const AddClass = () => {
    const [selectedOption, setSelectedOption] = React.useState();
    const { addClass, myclasses} = useContext(GlobalContext);
    const studOptions = myclasses.map((c)=> {
        return {label:c.students.map((s)=>{
            console.info("s",s)
            return([{value: s, label:s}]);
        }), value:c.id}
    })

    return (
        <React.Fragment>                                
            <form onSubmit = {handleSubmit(onSubmit)}>                                                                          
              <label>Select Students</label>                                  
              <Select        
                  value = {selectedOption}
                  isMulti
                  onChange = {handleChangeEvent}
                  options = {filteredStud}                              
              />                                                                     
            </form>
        </React.Fragment>
    )
}

export default AddClass

В чем ошибка? Наверное, неплохо было бы показать и свой GlobalContext.Provider.

Adam Jenkins 24.12.2020 03:00

Все студенты в один выбор?

thelonglqd 24.12.2020 03:08

Не совсем, каждого ученика нужно выбирать по щелчку, в любом случае вы помогли мне с ответами, которые сработали для меня. Спасибо всем!

Ars 25.12.2020 15:15
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
3
1 423
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Чтобы получить всех учеников во всех классах и поместить их в один вариант выбора, ваш код должен делать что-то вроде следующего:

const options = myclasses.map(c => c.students).flat().map(s => ({ label: s, value: s}))

Я бы сделал studOptions состоянием, извлек данные из myclasses для заполнения в studOptions, а затем отобразил их в select. Образец: https://codesandbox.io/s/affectionate-liskov-5k6l4?file=/src/App.js

Другие вопросы по теме