
anoru
19.05.2016
09:32:53
А как избавиться от
const test = (event, i) =>
<div onClick={event => this.test(event, i)}></div>
Тоже при каждом рендере будет создаваться функция.

Nikita
19.05.2016
09:33:09
вынести в компонент

anoru
19.05.2016
09:33:33
например? В данном случае const test не внутри рендера. А в классе
ойбез конст, конечно. туплю с утра что-то

Google

Vladimir
19.05.2016
09:33:52
во-первых, не я. Во-вторых, далеко не факт, что рендер конкретно этого элемента вызывается 100500 раз, в третьих создание функции не такая уж тяжелая операция, в-четвертых, преждевременная оптимизация - корень всего зла

Nikita
19.05.2016
09:34:40
в смысле не факт? Если у тебя там shouldComponentUpdate возвращает false всегда? Ну да, тогда не факт.
еще как тяжелая операция
это не преждевременная оптимизация. Это здравый смысл

anoru
19.05.2016
09:35:29
export default class Test extends Component {
test = (event, i) => {
console.log(i)
}
render() {
return <div onClick={event => this.test(event, 1)}/ >
}
}
вот маленький пример
как в данном случае передать параметр без создания новой функции в рендере. И без дата аттрибут
и сохранить евент

Алексей
19.05.2016
09:36:47
а что плохого в data атрибутах-то?

Roman
19.05.2016
09:36:50
https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-bind.md
тут как раз говорят о таких случаях
советуют выносить в отдельный компонент

anoru
19.05.2016
09:37:14
доставать из них - лишний код

Алексей
19.05.2016
09:37:31
две строчки
ну можно и одну даж

Google

anoru
19.05.2016
09:37:39
на 1 метод)

Nikita
19.05.2016
09:37:56
вот маленький пример
export default class Test extends Component {
test = (event, i) => {
console.log(i)
}
render() {
return <Child onClick={this.test} i={1} />
}
}
class Child extends Component {
constructor(props) {
super(props);
this.onClick = this.onClick.bind(this);
}
onClick(event) {
this.props.onClick(event, this.props.i);
}
render() {
return (
<div onClick={this.onClick} />
);
}
}

Daniil
19.05.2016
09:37:58
если у тебя рендер вызывается 100500 раз то вынос байнда тебя не спасет

Алексей
19.05.2016
09:38:10
можно написать один раз хэлпер, который будет возвращать все значения data атрибутов в виде объекта или еще чего
и не париться

Nikita
19.05.2016
09:38:44
а если бизнес-логика такая?

anoru
19.05.2016
09:39:12
@gusnkt кул, а если надо в 1 компоненте?

Nikita
19.05.2016
09:39:22
@ano

anoru
19.05.2016
09:39:24
бывает )

Nikita
19.05.2016
09:39:47
@anoru что надо в 1 компоненте?

anoru
19.05.2016
09:40:10
хотя стоп, только сейчас прочитал
это не решает вопрос, что я писал
ты не можешь подставить переменную в строчке с дивом
опять же дата аттрибут надо)

Nikita
19.05.2016
09:40:45
зачем?

anoru
19.05.2016
09:41:39
ну, есть у меня 5 дивов. Все они вызывают метод onClick допустим, который принимает event и какую-нибудь переменную - строка, например.
Ты сам понимаешь зачем, дискасс идет о подходах кто какие юзает, например

Nikita
19.05.2016
09:42:15
не, хочешь - юзай data-attribute, просто это не всегда возможно

Vladimir
19.05.2016
09:42:39
вот что вам пишет эта страничка? http://codepen.io/anon/pen/dMBXbJ?editors=1010#anon-login

Nikita
19.05.2016
09:42:41
а писать bind внутри render - говнокод

Daniil
19.05.2016
09:43:08
это не говнокод

Google

Алексей
19.05.2016
09:43:12

anoru
19.05.2016
09:43:29
А бывалислучаи, когда onClick={event => this.test(event, i)} прямо тормозили апп?
Ни разу не сталкивался. Ну,если там не 1000 перерендеров в секунду

Vladimir
19.05.2016
09:43:29
ок, это среднее время создания функции, если я нигде не налажал

Daniil
19.05.2016
09:43:34
если у тя рендер вызывается 100500 раз - это говнокод

Алексей
19.05.2016
09:43:44
мне кажется лучше один раз в одном месте прибиндить все методы

Vladimir
19.05.2016
09:43:47
1.5 микросекунды

Roman
19.05.2016
09:43:50

Nikita
19.05.2016
09:44:00
то что ты не знаешь, как работает v8?)) у тебя эта функция вынесена наверх за цикл))

Алексей
19.05.2016
09:44:18

Nikita
19.05.2016
09:44:32

Daniil
19.05.2016
09:46:18
у тебя рендер вызываться будет из-за апдейта props, и не всегда изменения props будет влиять на то что компонент рендерит, в этом случае выигрыш даст shouldComponentUpdate или reselect в редакс, это если мы говорим о реальных приложениях

Nikita
19.05.2016
09:47:24
ты меня не слышишь)) Разные данные постоянно приходят, РАЗНЫЕ. Знаю я про shouldComponentUpdate

anoru
19.05.2016
09:47:24
на codepen сломался логин через github(
впрочем через фейсбук тоже не работает

Roman
19.05.2016
09:48:32
о чем спор то, господа
если узкое место - оптимизируй любыми способами
если нет - пиши как хочешь/как позволяет установленный codestyle
разве нет?

Aleksey
19.05.2016
09:48:34

anoru
19.05.2016
09:49:09
то что ты не знаешь, как работает v8?)) у тебя эта функция вынесена наверх за цикл))
codepen сломался, так что скопирую сюда
let a = []
for(var i = 0; i<n;i++){a[i] = function(){console.log(this.a)}};

Google

anoru
19.05.2016
09:49:26
также

Vladimir
19.05.2016
09:49:33
обновил кодпен
сделал вообще шайтанство, но все равно две микросекунды на создание объекта

Aleksey
19.05.2016
09:50:35

Roman
19.05.2016
09:50:37

Aleksey
19.05.2016
09:50:53

Vladimir
19.05.2016
09:50:58
в общем, не надо сюда постить результаты, просто примите к сведению, что это очень мало

Aleksey
19.05.2016
09:51:07

Admin
ERROR: S client not available

Vladimir
19.05.2016
09:51:16
ну да, там еще один бинд
по факту наверное две функции теперь создается там

Ҫѐҏӗѫӑ
19.05.2016
09:51:50
я думал, что это все обсудили уже 100500 раз и забили как минимум год назад
норм Денис вбросил
сработало

Vladimir
19.05.2016
09:52:09
:)

Ҫѐҏӗѫӑ
19.05.2016
09:52:26
smm + 500

anoru
19.05.2016
09:52:27
это как apple vs android. всегда актуально)

Ҫѐҏӗѫӑ
19.05.2016
09:52:51
я вот собрался виндофон брать

Vladimir
19.05.2016
09:52:58
СТОП

Ҫѐҏӗѫӑ
19.05.2016
09:53:03
как второй моб

Google

Roman
19.05.2016
09:53:08
/stat@comstatbot

Ҫѐҏӗѫӑ
19.05.2016
09:55:11
как на десктопе нормально цитировать?

hlomzik
19.05.2016
09:56:14
даблклик для ответа

Ҫѐҏӗѫӑ
19.05.2016
09:57:33

Ruslan
19.05.2016
09:57:49
а у меня нормально не собирается с arrow function + class.
Missing class properties transform.

Ҫѐҏӗѫӑ
19.05.2016
09:57:58

Bogdan
19.05.2016
10:01:30
/stat@comstatbot

Andrey
19.05.2016
10:02:39

Ivan
19.05.2016
10:06:51
парни, скажите, а для children можно как то ref создать?

Tim
19.05.2016
10:08:20
```React.cloneElement(child, {ref: (el) => {}})```

Ruslan
19.05.2016
10:13:27

Ҫѐҏӗѫӑ
19.05.2016
10:13:50
психи
кстати, stag0 + es2015 не включает es2016 же?
драфт-то уже есть

Andrey
19.05.2016
10:17:38
какие новые фичи в 2016?

Ҫѐҏӗѫӑ
19.05.2016
10:18:33
экспоненшл оператор и .includes
может быть добавят Object.values() Object.entries()
они тоже готовы
но их не успели просунуть в мае в es2016

Andrey
19.05.2016
10:19:59
в общем, ничего сильно крупного не будет )