
Anton
03.06.2018
07:42:35
^ табы на powerplug

Roman
03.06.2018
07:51:44
у авито крутая дока блин)) где взять))) styleguidist шляпа по сравнению с ними

Vlad
03.06.2018
07:55:20

Google

Dimanius851
03.06.2018
08:48:25
а может быть такое что если в объекте стейта обновляется только объект в его глубине, то стейт не обновляется? что делать в таком случае?
еще раз?
что то мелькнуло

Cenator
03.06.2018
08:50:28
Спам был

Dimanius851
03.06.2018
08:50:35
а

Cenator
03.06.2018
08:51:00

Dimanius851
03.06.2018
08:52:30

Cenator
03.06.2018
08:53:02
А каким образом?

Dimanius851
03.06.2018
08:53:30
типа нулевой стал первым, а первый нулевым

Cenator
03.06.2018
08:56:19

Dimanius851
03.06.2018
09:08:43
не знаю, с какой части начинать скидывать код, короче, setState({ clippings }) и стей полностью идентичен прошлому стейт, за исключением того, что два объекта в videosParts поменялись местами, в них ничего не изменилось. А для рендеринга данные просто берутся из стейта: const { clippings } = this.state и дальше рендерятся так:
{clippings.map(clip => (
<Route
key={clip.key}
path={`${match.url}/${clip.key}`}
render={() => (
<SingleClip
updateVideosParts={this.updateVideosParts}
clippingKey={clip.key}
videos={clip.videosParts} />
)} />
))}

Cenator
03.06.2018
09:14:12

Google

Cenator
03.06.2018
09:14:21
Который в setstate

Dimanius851
03.06.2018
09:14:39
и при обновлении тоже
хз, в общем я решил, прелоадером, типа если !this.state.loading то рендерить все
а почему не перерендеривается при обновлении стейта - не знаю

Cenator
03.06.2018
09:18:25

Dimanius851
03.06.2018
09:21:33
componentDidMount = async () => {
await this.init()
}
init = async () => {
this.setState({ loading: true })
const clippings = await getClippings()
this.setState({
clippings,
loading: false,
})
}
updateVideosParts = async (key, videos) => {
await update(key, videos)
await this.init()
}

Николай
03.06.2018
09:35:01
Народ, использую Flow, есть такой кусок кода:
type State = {
answerState: "wait" | "wrong" (1)
}
class MainInput extends Component<Props, State> {
...
<div className={this.state.answerState == "WTF" ? ...}>
Почему Flow позволяет сравнивать мой answerState со строкой, которая НЕ допустима в описании типа (помеченного в коде пунктом (1))
?

Vladimir
03.06.2018
09:38:14
Попробуй выделить “wait" | "wrong" в отдельный тип
И потом сравнивай (“WTF”: Type)
Так должно работать/выкидывать ошибку

Николай
03.06.2018
09:41:08
Выделил “wait" | "wrong" в отдельный тип
Всё равно можно написать что-то типа
this.state.answerState == "wronggggg" и Flow промолчит (просто это выражение всегда будет false)
Как починить Flow?

Andrey
03.06.2018
09:43:26
А почему он тут сломан?
Всё правильно же.
Если хочешь сделать как тебе надо, то сделай функцию typeEqual(T a, T b)

Николай
03.06.2018
09:44:45
Я хочу, что бы Flow говорил, что я сравниваю свой this.state.answerState с недопустимым значением

Andrey
03.06.2018
09:45:03
Смотри решение выше.

Alexander
03.06.2018
09:45:04
в TS работат именно так, как хоче Николай
и это логично

Google

Николай
03.06.2018
09:45:23
Вот, хотелось бы, что б и Flow так делал...

Vladimir
03.06.2018
09:45:53
https://github.com/facebook/flow/issues/2394
Гуглинг выдал это
Прости, брат

Николай
03.06.2018
09:46:32
Качать typescript?

Vladimir
03.06.2018
09:46:38
Как решение, приходил в голову создать джсовый класс enum
И использовать его вместо enum flow

andretshurotshka?❄️кде
03.06.2018
09:47:59

Николай
03.06.2018
09:48:22

Alexander
03.06.2018
09:52:11

Дмитрий
03.06.2018
09:52:26
Для матчинга энамов есть switch

Николай
03.06.2018
09:52:42
у тебя присваивание, у меня сравнение на ==

Дмитрий
03.06.2018
09:53:13
Кстати тебя не смущает что ты приведение типов юзаешь

Николай
03.06.2018
09:53:51
мне не нужен полноценный матчинг энамов, мне нужно, что бы флоу в простом ифе НЕ позволял сравнивать значение энама с произвольной строкой

Alexander
03.06.2018
09:54:04

Николай
03.06.2018
09:54:55
ну дык я сравниваю с НЕдопустимым значением (список допустимых значений перечислен в определении типа через вертикальную палку)

Alexander
03.06.2018
09:55:16
но ты же не меняешься значение

Николай
03.06.2018
09:57:07
Меняю, просто то место, где меняю я не вставлял сюда, дабы упростить пример и четче показать саму суть вопроса.
Присвоения у меня есть, там флоу отлично работает, не позволяет присвоить то, чего нету в описании типа ( как у тебя на скрине )

Alexander
03.06.2018
09:58:53
ну короче, сравнение разных типов нормальная тема, так же как и во всех типизированных языках

Николай
03.06.2018
10:00:11
this.setState({
answerState: "WTF" // тут флоу выдаст ошибку, всё верно
})
if (this.state. answerState == "WTF") // а вот тут не выдаст, что в моем понимании странно
Это не сравнение типов, это сравнение двух значений разных (разных!) типов

Дмитрий
03.06.2018
10:00:21

Google

Alexander
03.06.2018
10:00:27

Дмитрий
03.06.2018
10:02:05
В окамле это было бы предупреждение о non exhaustive match. Правда там для этого юзается switch который спрашивающий уже с негодованием отверг кек

Николай
03.06.2018
10:04:21
Это да, exhaustive switch все дела.
Но мне нужен один пройсто if - else. Хочу, что бы в этом простом if-else тоже работал type checking, как и при присвоении, как и при exhaustive switch
Так, похоже typescript тоже пропускает такой код:
type State = {
answerState: "wait" | "wrong"
}
this.state.answerState == "WTF"
Как я понимаю, использовать алгебраические типы данных в качестве энамов нельзя

Stepan
03.06.2018
10:18:19
Ура, снова нихуя не понятно

Admin
ERROR: S client not available

Stepan
03.06.2018
10:18:21
Я скучал

Муслим
03.06.2018
10:19:13

Дмитрий
03.06.2018
10:19:23
Во первых у меня смутное подозрение что два равно тут не очень идея)) Во вторых да

Николай
03.06.2018
10:19:55
три знака равно тоже пропустит
Странно это, казалось бы, алгебраические типы только для энамов и использовать...

Дмитрий
03.06.2018
10:20:57

Danil
03.06.2018
10:25:07
народ, есть чатик по верстке или css?

Stepan
03.06.2018
10:25:16

Danil
03.06.2018
10:25:29

Ruslan
03.06.2018
12:15:56
Всем привет, подскажите пожалуйста, хочу через new FormData() закинуть туда файл и его название, затем отправить в акшен,откуда на сервер, но с поля ничего не считывается совсем, только пустота, вот код
fileChange = (event) => {
this.setState({file: event.target.files[0]}, console.log(event.target, 'file'))
};
bookUpload = () => {
const formData = new FormData();
formData.append('file',this.state.file);
formData.append('filename',this.state.bookName);
const config = {
headers: {
'content-type': 'multipart/form-data'
}
};
console.log(formData, 'data');
this.props.uploadBook(formData, config);
};
<input id='book' name='bookUpload' type='file' className='Input' onChange={this.fileChange}/>


Stepan
03.06.2018
12:18:27
Всем привет, подскажите пожалуйста, хочу через new FormData() закинуть туда файл и его название, затем отправить в акшен,откуда на сервер, но с поля ничего не считывается совсем, только пустота, вот код
fileChange = (event) => {
this.setState({file: event.target.files[0]}, console.log(event.target, 'file'))
};
bookUpload = () => {
const formData = new FormData();
formData.append('file',this.state.file);
formData.append('filename',this.state.bookName);
const config = {
headers: {
'content-type': 'multipart/form-data'
}
};
console.log(formData, 'data');
this.props.uploadBook(formData, config);
};
Не ставь content-type
Фетч сам проставит нужный
И он даст там boundary

Google

Stepan
03.06.2018
12:19:02
Короче, просто убери контент тайп и должно заработать

Ruslan
03.06.2018
12:19:21
хорошо, но проблема даже в том, что в formData ничего не попадает, пусто совсем…

Stepan
03.06.2018
12:20:17
Ты проверял через network
?

Ivan
03.06.2018
12:20:47
console.log не отображает содержимое formData

Ruslan
03.06.2018
12:20:55
аа,так вот в чем дело

Ivan
03.06.2018
12:21:01
только через .get

Ruslan
03.06.2018
12:22:46
Теперь понял, разобрался, спасибо всем

K
03.06.2018
12:31:30
Привет, хэндлинг запросов на апи через фетч должен производиться на уровне компонента, а в редусере чисто манипулировать с уже полученными данными или как?

Cenator
03.06.2018
12:31:55

K
03.06.2018
12:32:13
Ещё не дошел, только вот недавно редукс разбирал
Там я так понял идёт мидлвар для асинхронных компонентов, да?

Cenator
03.06.2018
12:32:43
асинхронных экшен криэйторов

K
03.06.2018
12:33:01

Ruslan
03.06.2018
12:33:27
только через .get
попробовал, все получилось, буду дальше разбираться с отправкой,спасибо

Cenator
03.06.2018
12:33:35