В настоящее время я столкнулся с проблемой с JS / React / React-Native. Я беру категории из API и делаю кнопки из результатов (они часто меняются в зависимости от разных переменных в URL-адресе). Код, который я использую для этого, выглядит следующим образом:
const cats = singles.map((d) => {
return (
<TouchableOpacity key={d} style={styles.Settingcats}><Text style={{color: '#f55f44'}}>{d}</Text></TouchableOpacity>
)}
Я хочу, чтобы динамически генерируемые кнопки можно было переключать в приложении. Когда я попытался использовать состояния с помощью следующего кода:
const cats = singles.map((d) => {
return (
<TouchableOpacity key={d} onPress={ _ => this.changeStyle} style={this.state.style === 0 ? styles.Settingcats : styles.SelSettingcats}><Text style={{color: '#f55f44'}}>{d}</Text></TouchableOpacity>
)}
И понял, что, поскольку это относится к одному состоянию для всех кнопок, это изменит все стили кнопок. Поэтому я попытался немного отойти от рамки и подумал об использовании идентификатора в качестве имени состояния, создании состояния и использовании состояния через внешнюю функцию для изменения его значения.
const cats = singles.map((d) => {
return (
<TouchableOpacity key={d} onPress={ _ => this.changeStyle(d)} style={this.state([d]) === 0 ? styles.Settingcats : styles.SelSettingcats}><Text style={{color: '#f55f44'}}>{d}</Text></TouchableOpacity>
)}
changeStyle(d){
this.setState({
[d] : 1
})}
Это вызывает ошибку, потому что состояние используется как функция.
Какие методы можно использовать, чтобы динамически создаваемые кнопки имели собственные отдельные события переключения?
Другие вещи, которые я пробовал: пользовательские переключатели, материальный интерфейс, но я застрял на той же проблеме, когда дело доходит до наличия уникальных функций для переключаемых кнопок.
2 ответа
Метод, который я использовал для достижения этой цели, за что я благодарен @simbathesailor.
Я использовал переменную в состоянии для динамического создания состояний, которые я мог использовать для определения того, были ли кнопки «включены» или «выключены», используя
this.state[d]
Где d была динамической переменной, которую я создал с помощью компонента TouchableOpaque.
Вместо того, чтобы пытаться управлять списком состояний на верхнем уровне, переместите TouchableOpacity в компонент, который обрабатывает состояние переключения внутри.
class MyButton extends React.Component {
constructor(props) {
super(props)
this.state = {
toggle: false
}
this.setToggle = this.setToggle.bind(this);
}
setToggle(){
this.setState({
toggle: !this.state.toggle
})
}
render(){
return <TouchableOpacity onClick={this.setToggle} className={this.state.toggle ? 'red' : 'blue'}>{this.props.name}</TouchableOpacity>
}
}
Вы можете отобразить их список, и каждый из них управляет своим состоянием переключения независимо от других.
Вот пример скрипки: https://jsfiddle.net/n5u2wwjg/220149/
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.