Итак, я хочу сделать генератор имен, вот данные
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
Немного неясно, о чем вы спрашиваете (и, похоже, вы спрашиваете несколько вещей). Здесь также довольно много кода, включая вызов API. Вы, вероятно, получите больше ответов, предоставив Минимальный, полный и проверяемый пример, задавая один вопрос за раз и включая текст любых сообщений об ошибках.
@TrueWill главный вопрос заключается в том, что я хотел бы получить свойство моих компонентов, например, когда я нажимаю одну из вкладок, я получаю значение метки, которое равно {section}, а затем я хотел бы прикрепить его к URL-адресу, например, если я щелкните вкладку с надписью germany, тогда мои вызовы api будут uinames.com/?region=germany



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


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