Получить значение свойства компонента в reactjs

Итак, я хочу сделать генератор имен, вот данные

export const dataGenerator = {
        gender: ["Male", "Female"],
        region: ["France", "Germany", "Italy", "Korea", "Russia"]
    }

мой компонент:

class NameGenerator extends React.Component{

    constructor(props){
        super(props);
        this.state = {
            value: 0,
            name: "",
            surname: "",
            gender: "",
            region: "",

        }

        this.onClick = this.onClick.bind(this);

    }

    // handle change
    handleChangeEvent = (e, value) => {
        this.setState({ value})
    }

    onClick(e){
        if (e.keyCode === 32){
            fetch('https://uinames.com/api/')
            .then( res => res.json())
            .then(namedata => {
                this.setState({
                    name: namedata.name,
                    surname: namedata.surname
                })
            })
        }
    }

    componentDidMount(){
        fetch('https://uinames.com/api/')
        .then( res => res.json())
        .then( namedata => {
            this.setState({
                name: namedata.name,
                surname: namedata.surname,
                gender: namedata.gender,
                region: namedata.region
            })
        });

        window.addEventListener('keyup', this.onClick, false);
    }

    //Display Select Region
    selectRegion = (value) => {
        switch(value){
            case 0:
                return <TabContainer>{this.state.name} {this.state.surname}</TabContainer>;
            case 1:
                return <TabContainer>Germany</TabContainer>;
            case 2:
                return <TabContainer>Italy</TabContainer>;
            case 3:
                return <TabContainer>Korea</TabContainer>;
            case 4:
                return <TabContainer>Russia</TabContainer>;

            default: 
            return 'error'
        }
    };


    render(){
        const { dataGenerator } = this.props;
        const { value} = this.state;        
        return(
            <div>
                <AppBar position = "static" color = "default">
                    <Tabs
                        value = {value}
                        onChange = {this.handleChangeEvent}
                        indicatorColor = "primary"
                        textColor = "primary"
                        fullWidth
                    >
                        {dataGenerator.region.map( (section, i) => {
                            return (
                                <Tab key = {section} value = {i} label = {section}/>
                            )

                        })}

                    </Tabs>

                    {this.selectRegion(value)}
                    <div>

                    </div>

                </AppBar>

            </div>
        );
    }
}

у меня на самом деле 2 проблемы сначала я хочу отобразить компонент TabContainer сразу после компонента Tab без использования оператора switch. Я попытался сделать это, но получил сообщение об ошибке

{dataGenerator.region.map( (section, i) => {
    return (
            <Tab key = {section} value = {i} label = {section}/>

            value === {i} && <TabContainer>{section}</TabContainer>
    )

вот почему я использую оператор switch, но ищу альтернативу. И во-вторых, я хочу получить метку свойства из вкладки, чтобы использовать ее в качестве запроса в моем API-интерфейсе, например «https://uinames.com/api/?region=germany», поэтому, когда вы щелкаете его свойства, добавляйте его к запросу в извлечении api

Я предполагаю, что вы получаете ошибку в первой части, потому что вам нужно обернуть <Tab> и <TabContainer> в родительский элемент для возврата, то есть <div> или <Fragment>

joknawe 27.06.2018 18:47

Немного неясно, о чем вы спрашиваете (и, похоже, вы спрашиваете несколько вещей). Здесь также довольно много кода, включая вызов API. Вы, вероятно, получите больше ответов, предоставив Минимальный, полный и проверяемый пример, задавая один вопрос за раз и включая текст любых сообщений об ошибках.

TrueWill 27.06.2018 18:48

@TrueWill главный вопрос заключается в том, что я хотел бы получить свойство моих компонентов, например, когда я нажимаю одну из вкладок, я получаю значение метки, которое равно {section}, а затем я хотел бы прикрепить его к URL-адресу, например, если я щелкните вкладку с надписью germany, тогда мои вызовы api будут uinames.com/?region=germany

Clarisa Valentin 28.06.2018 03:15
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
842
1

Ответы 1

уже решил это

я просто добавляю

onClick = {((e) => this.getSection(e, section))}

в

{dataGenerator.region.map( (section, i) => {
    return (
            <Tab key = {section} value = {i} label = {section} onClick = {((e) => this.getSection(e, section))}/>

    )

некоторые люди говорят, что вы не должны помещать такую ​​анонимную функцию, даже если документ в React сказал это, но это то, что делает React Doc, и это единственный способ, о котором я могу думать сейчас, вот код getSection

getSection = (e, section) => {
        this.setState({
            region: section
        })

    }

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