@react_js

Страница 431 из 5115
Vadim
01.09.2016
18:19:46
Можешь в state класть activeIndex

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

Alexander
01.09.2016
18:29:45
ребят подскажите как сделать что бы класс active вешался только на один li
какая логика должна быть? в каждый момент времени выбран только один элемент?

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
есть же radio:checked
и чем radio:checked лучше проверки activeIndex === index?

помимо того, что это требует лишнего HTML и в целом костыль

Kreizo
01.09.2016
18:54:25
и чем radio:checked лучше проверки activeIndex === index?
можешь сделать пул реквест ?

вроде бы такая простая задача

все с ней сталкиваются

а решение какое то сложное выходит

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.щас такие с ангуляра)

Страница 431 из 5115