@react_js

Страница 684 из 5115
Nikita
02.12.2016
11:10:42
Но тогда же компонент перерисовывается, не? Разве это не плохо?
компонент должен перерисовываться, это как бы его назначение

KlonD90
02.12.2016
11:10:44
функцию передавать
а ну видел такое да. но реф как-то удобнее хз

Дмитрий
02.12.2016
11:10:56
Отлично, срочно в прод!

Google
Александр
02.12.2016
11:10:59
Привет, ребят, кто может подсказать, оч странная штука происходит — есть элемент <Post />, который коннектится к redux через connect. Если у Post есть replies, то внутри него рисуются такие же Post в количестве replies. Все работает ок до тех пор пока не начинают отрисовываться сами реплаи. Они отрисовываются через replies.map(() => <Post>), само собой, со всеми необходимыми пропсами. Но в дочерних <Post>, именно тех, что маппятся, коннекта к редуксу не происходит. С чем может быть связано и что гуглить?

Владислав
02.12.2016
11:11:43
setState асинхронный, всё может быть)
я кидал туда колбек, но в колбеке тоже старый стейт

я не понимаю, что это за магия такая

Nikita
02.12.2016
11:12:01
покажи компонент)

в коллбек приходит последний стейт, по идее

from
02.12.2016
11:13:23
Всем привет, подскажите плз. Допустим, у меня есть компонент MyInput, состоящий из input. Как мне получить из компонента App value компонента MyInput с помощью ref?
если обращение непосредственно к value дом ноды необходимо, то компонент MyInput мог бы экспоузить метод .getInput(), и тогда достаточно к MyInput прилепить ref и всё. Но в большинстве же случаев метода onChange у MyInput должно быть достаточно

Nikita
02.12.2016
11:14:13
а есть еще варик

Владислав
02.12.2016
11:14:16
Nikita
02.12.2016
11:14:24
document.querySelector('.input').value

везде работает!

в колбек ничего не приходит
окай, он вызывается, когда this.state последний

или даже круче. findDOMNode(this).querySelector('input').value

Google
Владислав
02.12.2016
11:16:26
два разных объекта в консоли

в том плане, что this.state так и остался старым (:

Brs
02.12.2016
11:17:11
может у тебя в методе this не тот?

Владислав
02.12.2016
11:17:35
?

Vlad
02.12.2016
11:18:25
а зачем this.state в setState?

setState - всё равно мёржит состояния а не заменяет

Владислав
02.12.2016
11:18:49
а зачем this.state в setState?
это я затупил, привык к редуксу

Nikita
02.12.2016
11:19:49
интересно, если scu = () => false, при setState коллбэк вызовется?

Eugene
02.12.2016
11:21:45
если обращение непосредственно к value дом ноды необходимо, то компонент MyInput мог бы экспоузить метод .getInput(), и тогда достаточно к MyInput прилепить ref и всё. Но в большинстве же случаев метода onChange у MyInput должно быть достаточно
Спасибо, я только начинаю с реактом баловаться. Я просто не понимаю, как тогда с формой работать? В форме у меня 5-10 компонентов MyInput, как мне со всех собрать value и отправить на сервер? Не понятно пока что(

Vlad
02.12.2016
11:22:26
$ajax.post url, components.map (component) => component.state

псевдокод конечно

Eugene
02.12.2016
11:23:49
Alexander
02.12.2016
11:23:56
Но вообще, если нужно использовать текущий стейт в setState, можно еще так делать this.setState(state => ({ visible: !state.visible, });

Nikita
02.12.2016
11:23:57
интересно, если scu = () => false, при setState коллбэк вызовется?
https://jsfiddle.net/69z2wepo/63900/ вызовется, интересно)

Владислав
02.12.2016
11:25:06
Похоже, я нашел, в чем проблема. У меня там много асинхронных обновлений, и, похоже, они конфликтовали с setState по времени

from
02.12.2016
11:25:58
Спасибо, я только начинаю с реактом баловаться. Я просто не понимаю, как тогда с формой работать? В форме у меня 5-10 компонентов MyInput, как мне со всех собрать value и отправить на сервер? Не понятно пока что(
это зависит от того, как ты вообще в форме данные хранишь, используешь ли controlled inputs или нет Как самый простой вариант — инпуты с defaultValue и <form onSubmit={this.handleSubmit} /> handleSubmit(evt) { const data = new FormData(evt.target); fetch('/api/form', { method: 'post', body: JSON.stringify(data), }); }

и вообще dom api у форм и инпутов очень неплохой Я раньше восхищался тем, сколько всего полезного ангуляр позволяет с формами делать А теперь вижу, что браузеры поддерживают почти всё необходимое: pattern атрибут, метод checkValidity, :invalid псевдоселектор. Больше даже вроде не нужно ничего)

Eugene
02.12.2016
11:35:56
это зависит от того, как ты вообще в форме данные хранишь, используешь ли controlled inputs или нет Как самый простой вариант — инпуты с defaultValue и <form onSubmit={this.handleSubmit} /> handleSubmit(evt) { const data = new FormData(evt.target); fetch('/api/form', { method: 'post', body: JSON.stringify(data), }); }
Да, я использую controlled inputs. А что насчет такого варианта? <form onSubmit={this.handleSubmit.bind(this)})> <MyInput type="text" label="Username" placeholder="Admin" ref="username"/> </form> handleSubmit(e) { e.preventDefault(); this.sendFormData(); } sendFormData() { let formData = { username: this.refs.username.state.value }; тут send formData } То есть получается, что я хочу работать через this.refs.username.state.value. Такой вариант нормальный? Или это тоже не best practices?

Сергей
02.12.2016
11:36:22
бинды это плохо

Nikita
02.12.2016
11:36:41
чувак тебе сказали как нормально))

Google
Сергей
02.12.2016
11:36:51
в последней версии реакта ref должно быть функцией

Nikita
02.12.2016
11:36:51
либо пробрасывай наверх значение

либо пробрасывай defaultValue + name и сериализуй через form-api

все остальное - больная фантазия и так делать не нужно. или тихо, чтобы никто не видел

Eugene
02.12.2016
11:37:43
Понял, буду разбираться, спасибо)

from
02.12.2016
11:50:33
Сергей
02.12.2016
12:12:33
разумеется!

Eugene
02.12.2016
12:13:09
?

Я просто где-то читал, что советуется как можно реже использовать state :(

from
02.12.2016
12:14:27
Я просто где-то читал, что советуется как можно реже использовать state :(
поэтому у тебя каждый MyInput держит свой стейт, который ты ещё и выдёргиваешь из вне?)

Timur
02.12.2016
12:40:07
Народ, что значит эта запись? {...todo} Я знаю, что в ECMAScript 6 есть такая запись для массивов [...todo] Но в случае с объектом, IDE показывает ошибку

Vladimir
02.12.2016
12:40:56
Google: spread/rest operator es6

Andrew
02.12.2016
12:40:57
пробел убери

Timur
02.12.2016
12:41:29
пробел убери
да, без пробела, просто тут руками вбил

? ethorz
02.12.2016
12:41:33
Andrew
02.12.2016
12:41:43
что за IDE ?

? ethorz
02.12.2016
12:41:58
https://learn.javascript.ru/destructuring

прочти

Google
Timur
02.12.2016
12:42:13
NetBeans самая последняя тестовая версия, поддержка ECMAScript 6 имеется, даже некоторые фичи из 7 есть

Vladimir
02.12.2016
12:42:16
да он прочел, у него иде ошибку показывает:)

? ethorz
02.12.2016
12:42:49
хм

Andrew
02.12.2016
12:42:51
в netBeans не подскажу, сорян

Timur
02.12.2016
12:44:51
А, все, понял. Это чисто проблема NetBeans, надо написать багрепорт. Уже было такое, когда нормально не поддерживались классы ECMAScript 6, написал багрепорт, в тот же день исправили.

const TodoList = ({ todos, onTodoClick }) => ( <ul> {todos.map(todo => <Todo key={todo.id} {...todo} onClick={() => onTodoClick(todo.id)} /> )} </ul> ) Не могу разобрать, что тут происходит, конкретно внутри тегов <ul>. 1) Для чего всё что внутри <ul> обёрнуто в фигурные скобки? 2) Что значит {...todo} внутри класса <Todo />? Даже если вместо {...todo} написать Object.assign({}, todo), мне все равно не понятно, что это значит.

Admin
ERROR: S client not available

Vlad
02.12.2016
13:11:58
1) посмотри как jsx код js вставляется

2) это развёртка объекта на параметры в функцию

Timur
02.12.2016
13:12:51
А, понял, скобки для вставки Js, вспомнил.

2) Развертка объекта - это понятно. Как сказал Сергей Сова выше, в данном случае это просто копия объекта, тогда для простоты перепишу код вот в этом виде: const TodoList = ({ todos, onTodoClick }) => ( <ul> {todos.map(todo => <Todo key={todo.id} {1: 'name', 2: 'surname'} onClick={() => onTodoClick(todo.id)} /> )} </ul> ) Что это значит? Можно ли так писать?

Vlad
02.12.2016
13:18:59
нет :)

Mike
02.12.2016
13:22:25
типа Object.assign({}, todo)
всегда думал что {...args} это f.apply(null, args);

Сергей
02.12.2016
13:22:40
const a = {…b, c} это ни что иное const a = Object.assign({}, b, {c})

Mike
02.12.2016
13:24:46
понял о каком контексте использования идет речь

Timur
02.12.2016
13:27:40
Как можно еще записать эту запись? <Display {...props} /> Если props = {name: 'Timur', surname: 'Murtukov'}

from
02.12.2016
13:28:28
Google
from
02.12.2016
13:28:46
и это не то же самое, хотя результат тот же

Mike
02.12.2016
13:28:47
путаешь с fn(...args)
да я не выкупил в каком контексте был вопрос )

Сергей
02.12.2016
13:28:49
<Display name={props.name} surname={props.surname} />

Mike
02.12.2016
13:29:12
const { name, surname } = this.props; <Display name={name} surname={surname} />

Timur
02.12.2016
13:29:23
<Display name={props.name} surname={props.surname} />
А, ну теперь понял, спасибо

Насколько я понял, это фича самого React, а не js. Я имею ввиду запись <Display {...props} />

Дмитрий
02.12.2016
13:47:39
Нет

Это фича бабеля, а в будущем и js

Object spread

Вечно их путаю

Timur
02.12.2016
13:48:38
Ну, сказать, фича бабеля, наверное не верно, скорее фича ECMAScript 7

Дмитрий
02.12.2016
13:49:03
пока это строго фича бабеля

Сергей
02.12.2016
13:49:13
вот именно {…some} это предложение в ECMA

Дмитрий
02.12.2016
13:49:21
Завернут формат и всё, нет фичи

А в ES7 его уже нет

Изначально)

В js это всё пока в будущем времени

Timur
02.12.2016
13:51:54
хорошо, по порядку. Допустим это фича ECMA, не важно. Тогда, отбросив в сторону реакт, как можно записать вот это? var test = {...someVariable} Если someVariable = {name: 'Andrey', surname: 'Sidorov'}

Dmitriy
02.12.2016
13:54:07
Выше же писали уже const a = Object.assign({}, someVariable)

Алексей
02.12.2016
13:55:45
на реакте ни кто постоянку не ищет?

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