
Vadim
01.09.2016
18:19:46
Можешь в state класть activeIndex

Anton
01.09.2016
18:19:57
Может хранить в state номер индекса и при рендере проверять и добавлять, соответственно

Alexander
01.09.2016
18:29:45

Kreizo
01.09.2016
18:30:19
https://github.com/kreiz0/godota/blob/master/src/app.js

Google

Kreizo
01.09.2016
18:30:24
там список рендерится
и нужно по клику вешать класс active
на которую кликнули
у меня на все вешается

Alexander
01.09.2016
18:34:23
constructor(){
//super(), etc.
this.state = {active: []};
}
handleClick(item, index) {
const active=this.state.active.slice();
active[index]=true;
this.setState({ active })
}
render(){
return this.props.items.map((item, index) => <li className={this.state.active[index] && ‘active’} />)
}
у li onClick, соответственно, с this.handleClick(item, index)

Kreizo
01.09.2016
18:37:40
работает только чуть не так
http://i.prntscr.com/c87de10b3ff84e0494b3cd90094fabc3.png
получается когда по новому пункту кликаешь со старого не убирается
так и хочется подключить к реакту jquery

Alexander
01.09.2016
18:43:03
тогда вместо active: boolean делаешь activeIndex: number
и меняешь его при клике

Google

Alexander
01.09.2016
18:44:09
(item, index) => {const activeIndex = index; this.setState({ activeIndex }); }
можно короче, но я угорел по es6
во мне живет дух старой школы

Евгений
01.09.2016
18:44:56
Надо просто текущий пункт в списке подсвечивать по клику?

Alexander
01.09.2016
18:45:18
ну да
а, стоп, там еще и редакс

Евгений
01.09.2016
18:45:27
это ж css

Alexander
01.09.2016
18:45:39
в терминах css
а и после потери фокуса тоже

Kreizo
01.09.2016
18:45:56
да
тот что активен в данный момент

Евгений
01.09.2016
18:46:37
есть же radio:checked

Kreizo
01.09.2016
18:47:06
просто по клику вешать класс active
потом убирать
когда следующий клацнуть
по идее нужно дизпатч делать в handleClick
и как то передать через props
как же сложно осиливать этот реакт + редакс после ангуляра и верстки

Google

Евгений
01.09.2016
18:49:04
погоди
да тут же просто css
каждый пункт это радиобаттон и лейбл
с одинаковым именем

Kreizo
01.09.2016
18:49:50
это li

Евгений
01.09.2016
18:49:55
клик по лейблу делает радиобаттон чекнутым
а остальные анчекает
ну и что что это li
заверстать то все что угодно можно

Kreizo
01.09.2016
18:50:27
ну это костыль

Евгений
01.09.2016
18:50:42
да ну
а такую тривиальную задачу делать через react + redux не костыль?

Евгений
01.09.2016
18:51:25
на css на это даже строчек кода уйдет меньше

Alexander
01.09.2016
18:53:41
помимо того, что это требует лишнего HTML и в целом костыль

Kreizo
01.09.2016
18:54:25
вроде бы такая простая задача
все с ней сталкиваются
а решение какое то сложное выходит

Alexander
01.09.2016
18:55:27
зависит от используемых инструментов

Google

Name
01.09.2016
18:55:34
напиши своё решение на бумажке и подумай сперва
ничего там сложного

Alexander
01.09.2016
18:55:41
если для стейта редакс или флакс использовать, конечно, сложно

Dmitry
01.09.2016
19:25:14
А нужно ли этот стейт хранить в редаксе?

Kreizo
01.09.2016
19:37:41
https://www.reddit.com/r/reactjs/comments/36cbhr/how_do_you_toggle_a_css_class_on_click_in_react/
http://i.prntscr.com/32da07e25fa14b57992c979ee61422cc.png

Dreamerinnoise
01.09.2016
19:38:55
Найс скрин

Alexander
01.09.2016
19:39:21
тогда вместо active: boolean делаешь activeIndex: number
(item, index) => {const activeIndex = index; this.setState({ activeIndex }); }

Admin
ERROR: S client not available

Kreizo
01.09.2016
19:39:21
все сделал точно как на редите

Alexander
01.09.2016
19:40:08
В li className={(this.state.activeIndex === index) && 'active'}
На три строки блять решение

Vadim
01.09.2016
19:41:08
На редите про другое, там про отдельный checked компонен
а тут у тебя RadioGroup
У которого в стейте есть activeIndex
и рендерит этот компонет свои li элементы как говорит @chudesnov

Vladimir
01.09.2016
19:50:23
https://twitter.com/_developit/status/771423460295741441

Kreizo
01.09.2016
19:51:27
не получилось
не могу этих два решения в одно слепить
все перепутал

Google

Alexander
01.09.2016
19:52:56
выкинь все и сделай с нуля

Kreizo
01.09.2016
19:55:11
http://i.prntscr.com/7961dcd2043445a68c0a3a77c2fdf41b.png
что в конструкторе и хендлклике нужно указать ?

Alexander
01.09.2016
19:55:52
в конструкторе создать дефолтный стейт
по дефолту должен кто-то быть выбран?
setState из рендера выкинь

Kreizo
01.09.2016
19:56:24
никто

Alexander
01.09.2016
19:56:33
ты же в курсе, что this в твоем map - это весь компонент?
а не конкретный li

Vadim
01.09.2016
19:57:10
setState в handleClick

Alexander
01.09.2016
19:57:13
кусок с setState перенеси в handleClick

Kreizo
01.09.2016
19:57:13
в курсе

Alexander
01.09.2016
19:57:21
и все должно заработать

anoru
01.09.2016
20:04:41
А как с ангуляром справлялся? Там без js тоже никуда. Или только ng-if в хтмл писал? Ангуляр даже сложнее реакта, если углубиться

Kreizo
01.09.2016
20:05:07
получилось
ангуляр очень простой
просто не понимаешь как оно работает
одна магия
и в разы больше инфы
на любую задачу есть ответ

anoru
01.09.2016
20:06:19
Раньше были жквери программисты- которые не понимают как работает js.щас такие с ангуляра)