Создание динамических переключателей с помощью React и Meteor и Simple Schema (с использованием шаблона щенка)
Я новичок в реагировании на JS, и я учусь тому, как использовать радиокнопки, используя шаблон щенка.
Я пытаюсь добавить входной радиокод для icon
в https://github.com/cleverbeagle/pup/blob/master/imports/ui/components/DocumentEditor/DocumentEditor.js, и вот где я сейчас нахожусь:
<FormGroup>
<ControlLabel>Icon</ControlLabel>
{['mobile', 'tablet', 'laptop', 'tv'].map((el, i) =>
<Radio
ref={icon => (this.icon = icon)}
key={i}
name="icon"
value={el}
onChange={e => this.handleRadioSelection(e)}
inline>
<i className={`fa fa-3x fa-${el}`}></i>
</Radio>
)}
</FormGroup>
обработчик:
handleRadioSelection (e) {
const { name, value } = e.target;
this.setState({
[name]: value
});
}
схема (с использованием упрощенной схемы)
icon: {
type: String,
label: 'The icon that better represents the platform.',
allowedValues: ['mobile', 'tablet', 'laptop', 'tv'],
},
У меня есть 2 вопроса:
- Мой массив жестко запрограммирован, и я хотел бы импортировать из схемы массив allowValues, как это сделать?
- Мой обработчик события onChange не работает, чего не хватает?
Примечания: на веб-странице я вижу переключатели, которые меняются при выборе радио, но новое значение не сохраняется.
1 ответ
из документов "Вы можете использовать
schema.getAllowedValuesForKey(key)
получить массив разрешенных значений для ключа."Вам нужно привязать функцию к
this
контекст. Подробнее об этом, например, здесь. Итак, короче говоря, либо в конструкторе сделатьthis.handleRadioSelection = this.handleRadioSelection.bind(this);
или сделайте функцию стрелки:handleRadioSelection = (e) => { const { name, value } = e.target; this.setState({ [name]: value }); }
и используйте это как:
<Radio onChange={this.handleRadioSelection} />
Чтобы функция стрелки работала, вам нужно добавить плагин babel для преобразования свойств класса. Делать
meteor npm install --save-dev babel-plugin-transform-class-properties
и добавьте следующее в ваш.babelrc{ "plugins": ["transform-class-properties"] }