
Алексей
05.09.2016
08:29:25

Andrey
05.09.2016
08:30:21
проблема будет еще в дев тулсе браузера, там будет куча IfTrue

Алексей
05.09.2016
08:31:16

Mikhail
05.09.2016
09:26:50
Скажите, что нынче заюзать для анимации в реакте? react-motion?

Google

Mikhail
05.09.2016
09:30:25
Или react-addons-css-transition-group? Ничто не старьё, все актуально?

pepsi ¯\_(ツ)_/¯
05.09.2016
09:31:22

Dmitry
05.09.2016
09:31:26
:)
https://github.com/brillout/awesome-react-components#ui-animation

Evgeny
05.09.2016
09:33:00
Кажется сам разобрался, удалил

roma
05.09.2016
09:34:42
метод утенка решает

Evgeny
05.09.2016
09:34:54
Шаришь

Ches
05.09.2016
09:36:55
подскажите что значит call PropTypes directly
что то из доков не понял
угу

Ҫѐҏӗѫӑ
05.09.2016
10:23:09
начали продавать билеты на реакт европ 2017

Михаил
05.09.2016
10:26:28
а можно как-то сделать в css-modules чтобы в <div class="table__table___32osj">
<div class="table__row___2w27N">
<div class="table__cell___1oVw5">A0</div>
<div class="table__cell___1oVw5">B0</div>
</div>
</div> корневой элемент получал только имя файла (либо только имя локального селектора)?
чтобы было просто table__32osj

Google

hlomzik
05.09.2016
10:27:59

Михаил
05.09.2016
10:28:38
чтобы красиво было, и только

hlomzik
05.09.2016
10:28:47
+ проблемы с определением “корневого элемента”

Kreizo
05.09.2016
10:37:52
ребят подскажите какую то либу к реакту
вместо редакса
для MVC

Кисик
05.09.2016
10:38:13
mobx?

Ostap
05.09.2016
10:38:19
+

Dmitriy
05.09.2016
11:02:39
как заставить компонент перехватывать keyDown во всем окне, независимо от фокуса в этом компоненте?

Dmitry
05.09.2016
11:03:33
window.addEventListener

Dmitriy
05.09.2016
11:04:10
а это нормально лезть в window из компонента
?

Алексей
05.09.2016
11:04:35

Dmitry
05.09.2016
11:05:10
Да, при маунте добавляешь, при анмаунте удаляешь


Bogdan
05.09.2016
11:18:23
А что вы используете для ajax запросов?
файлик из 60 строчек кода который копирую из проекта в проект
function request(method, path, query, body, headers, upload, download){
return new Promise((resolve, reject)=>{
var xhr = new XMLHttpRequest();
var url = path + (query && Object.keys(query).length ? ('?'+qs.stringify(query)) : '');
xhr.open(method, url);
xhr.setRequestHeader('Accept', 'application/json');
var bodyString;
if (method !== "GET" && body) {
if (body instanceof Blob) {
bodyString = body;
} else {
bodyString = JSON.stringify(body);
xhr.setRequestHeader('Content-Type', 'application/json');
}
}
if(headers) {
for (var header in headers) {
xhr.setRequestHeader(header, headers[header])
}
}
if(upload){
xhr.upload.onprogress = function(event) {
var percent = Math.floor((event.loaded / event.total) * 100);
upload(percent, event.loaded, event.total);
};
}
if(download){
xhr.onprogress = function(event) {
var percent = Math.floor((event.loaded / event.total) * 100);
download(percent, event.loaded, event.total);
}
}
xhr.onload = xhr.onerror = function() {
try {
var receivedData = JSON.parse(this.responseText);
} catch(e){
reject('wrong json response', this.responseText);
}
if (this.status >= 200 && this.status <= 299) {
resolve(receivedData)
} else {
reject(receivedData)
}
};
xhr.send(bodyString);
})
}
request.get = request.bind(null, "GET");
request.post = request.bind(null, "POST");
request.put = request.bind(null, "PUT");
request.delete = request.bind(null, "DELETE");


Алексей
05.09.2016
11:19:20
файлик из 60 строчек кода который копирую из проекта в проект
function request(method, path, query, body, headers, upload, download){
return new Promise((resolve, reject)=>{
var xhr = new XMLHttpRequest();
var url = path + (query && Object.keys(query).length ? ('?'+qs.stringify(query)) : '');
xhr.open(method, url);
xhr.setRequestHeader('Accept', 'application/json');
var bodyString;
if (method !== "GET" && body) {
if (body instanceof Blob) {
bodyString = body;
} else {
bodyString = JSON.stringify(body);
xhr.setRequestHeader('Content-Type', 'application/json');
}
}
if(headers) {
for (var header in headers) {
xhr.setRequestHeader(header, headers[header])
}
}
if(upload){
xhr.upload.onprogress = function(event) {
var percent = Math.floor((event.loaded / event.total) * 100);
upload(percent, event.loaded, event.total);
};
}
if(download){
xhr.onprogress = function(event) {
var percent = Math.floor((event.loaded / event.total) * 100);
download(percent, event.loaded, event.total);
}
}
xhr.onload = xhr.onerror = function() {
try {
var receivedData = JSON.parse(this.responseText);
} catch(e){
reject('wrong json response', this.responseText);
}
if (this.status >= 200 && this.status <= 299) {
resolve(receivedData)
} else {
reject(receivedData)
}
};
xhr.send(bodyString);
})
}
request.get = request.bind(null, "GET");
request.post = request.bind(null, "POST");
request.put = request.bind(null, "PUT");
request.delete = request.bind(null, "DELETE");
npm не вариант? :)


Vladimir
05.09.2016
11:20:01
файлик из 60 строчек кода который копирую из проекта в проект
function request(method, path, query, body, headers, upload, download){
return new Promise((resolve, reject)=>{
var xhr = new XMLHttpRequest();
var url = path + (query && Object.keys(query).length ? ('?'+qs.stringify(query)) : '');
xhr.open(method, url);
xhr.setRequestHeader('Accept', 'application/json');
var bodyString;
if (method !== "GET" && body) {
if (body instanceof Blob) {
bodyString = body;
} else {
bodyString = JSON.stringify(body);
xhr.setRequestHeader('Content-Type', 'application/json');
}
}
if(headers) {
for (var header in headers) {
xhr.setRequestHeader(header, headers[header])
}
}
if(upload){
xhr.upload.onprogress = function(event) {
var percent = Math.floor((event.loaded / event.total) * 100);
upload(percent, event.loaded, event.total);
};
}
if(download){
xhr.onprogress = function(event) {
var percent = Math.floor((event.loaded / event.total) * 100);
download(percent, event.loaded, event.total);
}
}
xhr.onload = xhr.onerror = function() {
try {
var receivedData = JSON.parse(this.responseText);
} catch(e){
reject('wrong json response', this.responseText);
}
if (this.status >= 200 && this.status <= 299) {
resolve(receivedData)
} else {
reject(receivedData)
}
};
xhr.send(bodyString);
})
}
request.get = request.bind(null, "GET");
request.post = request.bind(null, "POST");
request.put = request.bind(null, "PUT");
request.delete = request.bind(null, "DELETE");
уж лучше fetch


Evgeny
05.09.2016
11:20:06
https://github.com/jqestate/http.js

Vladimir
05.09.2016
11:20:11
буэ

Google

Anton
05.09.2016
11:20:28

Evgeny
05.09.2016
11:20:32
Чем лучше

Anton
05.09.2016
11:20:37
или axios

Alxander
05.09.2016
11:20:44
fetch довольно геморройный.

Vladimir
05.09.2016
11:20:50
чем?

Alxander
05.09.2016
11:22:38
Параметры прописать всякие, чтобы куки слались, response.json(), ошибки ловить (503 по умолчанию в catch не падает по понятным причинам).
Всё равно обвязку писать придётся, чтобы простое обращение за json'кой не занимало десятки строк.

Vitaliy
05.09.2016
11:29:48

Bogdan
05.09.2016
11:30:06
npm не вариант? :)
я просто не любитель раздувать зависимости. Можно конечно вынести этот код в свой пакет, но мне кажется посмотреть другому человеку 60 строчек кода в папке utils быстрее чем идти в package.json потом на сайт npm, потом на гитхаб и там смотреть исходники

Alxander
05.09.2016
11:31:06

Vladimir
05.09.2016
11:31:39
а твой велосипед каждому новому разработчику читать снова и снова

Alxander
05.09.2016
11:34:45
Ну так всё равно велосипед писать придётся, не будешь же ты каждый раз прописывать параметры авторизации, хедеры нужные и т.д.

Vladimir
05.09.2016
11:35:21
это уже app-специфик имплементация
это норм

Ҫѐҏӗѫӑ
05.09.2016
11:36:08
он ужасен

Alxander
05.09.2016
11:36:39

Vitaliy
05.09.2016
11:36:45

Alxander
05.09.2016
11:36:48
Хотя fetch лучше, конечно.

Konstantin
05.09.2016
11:37:37

Google

Ҫѐҏӗѫӑ
05.09.2016
11:37:57
а более аргументированно?
там дебильное апи с несколькими вариантами сделать одно и то же, ничего нет для работы с зависимыми сторами

Vitaliy
05.09.2016
11:38:47

Admin
ERROR: S client not available

Nikita
05.09.2016
11:40:07
вообще несколько сторов - это отвратительно) нужен 1 стейт, иначе нереально дебажить

Ҫѐҏӗѫӑ
05.09.2016
11:40:16
тем, что есть соблазн написать все по-разному, в итоге это неудобно поддерживать, применять инструментарий для рефакторинга, растет энтропия, надо зачем-то знать все эти варианты

Nikita
05.09.2016
11:40:21
ну может для оптимизаций 2-3, но это прям если сильно припечет

Ҫѐҏӗѫӑ
05.09.2016
11:40:23

Nikita
05.09.2016
11:40:45
я по опыту работы с flux говорю. Который фейсбучный

Ҫѐҏӗѫӑ
05.09.2016
11:41:12
я говорю по своему опыту, что иногда наличие нескольких сторов оправдано
про это есть ишью на гх в реакт репе
там тоже норм кейсы
или в редаксе наверное, не в реакте

Victor
05.09.2016
11:42:02

Nikita
05.09.2016
11:43:03

Vitaliy
05.09.2016
11:43:59

Bogdan
05.09.2016
11:44:56
> Paul Klimashkin [5/22/16]
mobx можно не использовать не потому что он новый, а потому что это старые грабли
В старых добрых обзерверах и копьютедах. С ростом проекта будет расти кол-во кроссзависимых обзерверов, обновления будут выстреливать в разные стороны как феерверк, что усложняет отладку и приводит к неочевыдным багам или к циклическим зависимостям, которые сложно распутать или найти точку прекращения распространения обновлений
А может кто-то объяснить в чем проблема роста кроссзависимых обзерверов? Эти больше по технической части mobx (типа будет тормозить в отличии от редакса) или может какая-то тема архитектуры (типа нет контейнеров и нужно передавать все через пропсы)

Vitaliy
05.09.2016
11:45:09

Victor
05.09.2016
11:45:26

Nikita
05.09.2016
11:45:34

Vitaliy
05.09.2016
11:46:49
огромная - это как определить?
это когда апп имеет порядка 30 уникальных по логике секций (модулей) и каждый модуль может имеет еще разный функционал и требует сохранения данных

Google

Vitaliy
05.09.2016
11:47:50
ну либо уносить на уровень каких то утилит

Victor
05.09.2016
11:50:00

Konstantin
05.09.2016
11:51:47

Vitaliy
05.09.2016
11:52:56

Victor
05.09.2016
11:56:26

Dmitry
05.09.2016
11:57:31

Ҫѐҏӗѫӑ
05.09.2016
11:58:15
у меня много проектов. везде по-разному. и везде разные flux-like либы

Vitaliy
05.09.2016
12:12:17

Victor
05.09.2016
12:19:38
да, через параметры
А как это организовано? В примерах, которые я сморел, доступ осуществляется через this.state

Vitaliy
05.09.2016
12:29:03

Victor
05.09.2016
13:03:54