Компонент рендеринга, основанный на состоянии / пропоте в React?
Я изучал React, и мне было интересно, как я смогу отображать классы / компоненты в зависимости от состояния?
Я думал, возможно, положить что-то вроде:
var currentState = this.state.title;
< currentState />
но это не похоже на работу.
Я могу сделать это, используя операторы if или case/switch, но это не кажется особенно гибким.
Вот с чем я сейчас работаю:
var Proj1 = React.createClass({
render: function(){
return (
<h1>Number one</h1>
)
}
});
var Proj2 = React.createClass({
render: function(){
return (
<h1>Number two</h1>
)
}
});
var ContentContainer = React.createClass({
getInitialState: function(){
return {
title: 'Proj1'
}
},
render: function(){
return (
///// Proj1?
)
}
});
React.render(
<ContentContainer/>, document.getElementById('container')
);
По сути, я хотел бы сделать соответствующий класс на основе текущего имени государства. Например, если state.title = Proj1, я хотел бы отобразить Proj1, или, если state.title = Proj2, я хотел бы отобразить Proj2.
Пожалуйста и спасибо
2 ответа
Я хочу добавить комментарий к Тайлеру МакГиннису, но, к сожалению, у меня недостаточно репутации, чтобы сделать это:). Я думаю, что отредактированный ответ "сработал", но все же нам нужна карта между названием и классом. Один из способов - сохранить эти классы React в доступном объекте, например
Components = {};
Components.Proj1 = React.createClass({...}};
Components.Proj2 = React.createClass({...}};
...
ContentContainer = React.createClass({
return (
var Proj = Components[this.state.title];
<Proj/>
});
Я думаю, что это все еще немного хак, и у меня нет лучшего ответа.
Я думаю, что в большинстве случаев состояния компонентов React используются для управления определенными свойствами html / css, ваш вариант использования больше похож на использование фабрики объектов для создания / получения объектов различного типа, в которых использование оператора if не кажется плохим.
Есть несколько способов сделать это. Все в основном просто заявления, хотя. Я бы, наверное, пошел с чем-то вроде этого и использовал бы троичный оператор, это обычно самая распространенная практика.
var ContentContainer = React.createClass({
getInitialState: function(){
return {
title: 'Proj1'
}
},
render: function(){
return this.state.title === 'Proj1' ? <Proj1 /> : </Proj2>;
}
});
редактировать: я думаю, что вы хотите знать, как установить компоненты для переменных. В этом примере
var currentState = this.state.title;
< currentState />
если мы предположим, что this.state.title был компонентом (а это не так), то вам просто нужно использовать прописную букву currentState.
Например.
getInitialState(){
return {
proj1: Proj1 //Proj1 is a React Component.
}
}
render(){
var Proj1 = this.state.proj1; //you just need to capitalize the variable name.
return <Proj1 />
}