Я работаю над базовым приложением для выбора цвета, чтобы изучить React и лучше понять его.React - создание объекта стиля по всему миру
Как это работает, у меня есть текстовое поле, которое принимает шестнадцатеричные значения и отображает их как цвет фона при вводе. То, что я хочу иметь, это вернуть фоновый фон в значение по умолчанию, когда вы очищаете текстовое поле. Прямо сейчас, он возвращается к предыдущему цвету, который был набран в функциональном коде, который я до сих пор выглядят следующим образом:.
class ColorPick extends React.Component {
constructor(props) {
super(props);
this.state = {
color: "Let's pick a color"
};
}
changeColor(event) {
var colorInput = document.getElementById('colorInput').value;
this.setState({
color: event.target.value
});
if (colorInput === '') {
this.setState({
color: "Let's pick a color",
backgroundColor: "#fff"
});
}
}
render() {
var styleObj = {
backgroundColor: this.state.color,
};
return (
<section style={styleObj} id="Profile" >
<h2 className="colorHeader">{this.state.color}</h2>
<input id="colorInput" placeholder="Enter Hex Code Here" onChange={this.changeColor.bind(this)}/>
</section>
);
}
}
ReactDOM.render(<ColorPick />, document.getElementById('app'));
Для достижения клиринга на цветном фоне с пустым текстовым полем, я пытаюсь для глобализации переменной/объекта styleObj
и изменить ее значение на backgroundColor: none
, если значение поля пустое. вместе с тем, я объявляю это с помощью let
. Таким образом, чтобы сделать, что я пробовал:
class ColorPick extends React.Component {
// making styleObj global and changing from var to let.
let styleObj = {
backgroundColor: this.state.color,
};
...
changeColor(event) {
var colorInput = document.getElementById('colorInput').value;
this.setState({
color: event.target.value
});
if (colorInput === '') {
this.setState({
color: "Let's pick a color",
backgroundColor: "#fff"
});
// attempting to reset back to default after text field is cleared
let styleObj = {
backgroundColor: none,
};
}
}
Однако два неожиданных результатов случилось:
Компонент полностью исчез со страницы после принятия
styleObj
ГЛОВАЛЬНЫЙ переменная объектаbackgroundColor
становится неожиданным идентификатором.
Нельзя ли сделать этот блок CSS глобальной переменной/объектом доступным для всей области? Я также попытался изменить конкретное размещение моей переменной, начиная от права под созданием компонента, прямо над методом render
. Должен ли я делать это по-другому?
Ниже приведены две вилки, функциональная версия, и версия, которая не работает с комментариями:
рабочая версия: https://codepen.io/kawnah/pen/EZqLaq?editors=0010
нерабочим версия: https://codepen.io/kawnah/pen/XpvOpp?editors=0010
EDIT: Как вы можете видеть, для моего заполнителя для моего состояния цвета я использую строку. Ожидая, что это сломается, это сработало. Зачем?
Хорошо, я вижу, что я сделал не так - мне в основном нужно было разделить текст и цвет фона на два отдельных значения. Так что реагировать на состояние данных не строгие, если я могу передать строку? Я был удивлен, увидев, что не сломался. – kawnah
@kawnah, они не строги, если вы можете передать строку где? Реагировать типы данных на самом деле не очень строгие, я имею в виду, что React - это просто javascript. Таким образом, типы данных (насколько «состояние» и переменные идут) будут такими же свободными, как и у Javascript. – aaronofleonard