@react_js

Страница 2324 из 5115
Anton
16.10.2017
00:28:22
ребзя..есть кто шарит?..подскажите плз..есть два одинаковых компонента, один класс, другой функция.

class SwipeListItem extends React.Component<Props> { constructor() { super(); console.log('we are in constructor'); } _onDeleteButtonPress = (): void => this.props.onDeleteButtonPress(this.props.item.id); _onItemPress = (): void => this.props.onItemPress(this.props.item.id); render(): React.Element<*> { return ( <SwipeRow body={ <View style={styles.listItemContainer}> <TouchableOpacity onPress={this._onItemPress}> <Text>{this.props.item.name}</Text> </TouchableOpacity> </View> } disableRightSwipe right={ <Button danger onPress={this._onDeleteButtonPress}> <Icon active name="trash" /> </Button> } rightOpenValue={-75} /> ); } } const SwipeListItem = <TEntity>({ onDeleteButtonPress, onItemPress, item, }: Props<TEntity>): React.Element<*> => { console.log('call functional component'); const _onDeleteButtonPress = (): void => onDeleteButtonPress(item.id); const _onItemPress = (): void => onItemPress(item.id); return ( <SwipeRow body={ <View style={styles.listItemContainer}> <TouchableOpacity onPress={_onItemPress}> <Text>{item.name}</Text> </TouchableOpacity> </View> } disableRightSwipe right={ <Button danger onPress={_onDeleteButtonPress}> <Icon active name="trash" /> </Button> } rightOpenValue={-75} /> ); };

когда я фетчю новые итемы в листе ..рендерится вот так:



Google
Anton
16.10.2017
00:29:03
что в итоге быстрее, чет не допру..по судя по картинке класс

когда все зафетчилось, поведения одинаковое

kana
16.10.2017
00:30:11
Лог в классе вызывается только в конструкторе, а не в рендере (то есть рендер может и 10 раз вызываться, а ты увидишь только один раз), а в функции лог при каждом рендере

Anton
16.10.2017
00:31:56
но вообще смысл этого компонента, забиндить _onDeleteItem и _onPressItem, чтобы они не пересоздавались при каждом onPress=()..поулчается что при использвоании класса, эти функции создаются один раз, а при функциональном компоненте, каждый раз, так?

т.е. класс так или иначе предпочтительнее здесь?

kana
16.10.2017
00:32:59
Нет, я не сказал, что класс предпочтительнее, я сказал, что ты проводишь неправильную проверку

Anton
16.10.2017
00:33:11
да, эт я понял, за это спасибо)

я уже дальше иду)

я хочу минимальное количество раз пересоздавать onDeleteItem

kana
16.10.2017
00:33:44
Но вообще да, если у тебя в функции идёт создание лямбды, то это не очень хорошо, класс в этом плане лучше

Anton
16.10.2017
00:35:06
впрочем наврено можно вынести в парент компонент замыкание этих функций так onDeleteItem = (id) => () => {..do stuff} ...тогда и функциоальный компонент прокатит

ну ок, спасибо за помощь

kana
16.10.2017
00:35:40
Если у тебя парент - список, то не получится

Google
Anton
16.10.2017
00:36:15
парент враппер над react-native'ским FlatListom

вот это в паренте:

_onDeleteItemPress = (id: string): Promise<void> => () => { this.props.locationStore.deleteByID(id); }; _onItemPress = (id: string): void => this.props.navigation.navigate('locationDetails', { id, }); _renderItem = ({ item }: { item: Location }): React.Element<*> => ( <SwipeListItem item={item} onDeleteItemPress={this._onDeleteItemPress} onItemPress={this._onItemPress} /> render(): React.Element<*> { return ( <FlatList ListFooterComponent={this._renderFooter} onEndReached={this._fetchNextData} data={this.props.locationStore.all} keyExtractor={this._keyExtractor} renderItem={this._renderItem} /> ); }

т.е. если в _onDeleteItempress добавить пару скобочек, должно прокатить, не?

потому что сам этот враппер маунтится всего разок

впрочем, на всякий случай для тех, кто это может будет читать: выбирайте класс в данной ситуации, и не партье мозги как я с замыканиями, все кто после вас будет смотреть ваш код, спасибо скажут :) upd: или используйте recompose и вообще забейте на классы

kana
16.10.2017
01:20:17
Я довольно долго юзал рекомпос и в итоге предпочел вернуться на классы

Рекомпос хорош в простых кейсах, но строить большой контейнер на нем - боль

Anton
16.10.2017
01:27:01
а мы как-то в одном проекте прям рекомпос аддиктед стали :)..прям очень зашел...в последнем правда тоже вернулись на классы, т.к. mobx, а он с декораторами намного красивее и понятее выглядит.

Единственное с рекомпосом флоу задолбались сдруживать ).. вот эт прям даа..боль

Дмитрий
16.10.2017
05:53:43
Recompose — как приправа — может оказаться очень к месту но очевидно не обязательно фигачить это везде ?

Aleksandr
16.10.2017
07:08:57
Хотел забанить, а я не админ(

Fedor
16.10.2017
07:09:37
позови админа )

Roman
16.10.2017
07:43:50
https://github.com/dvajs/dva

что про это скажете?

Tim
16.10.2017
08:15:09
node 8.7.0, npm 5.4.2 package-lock сломался, снес его, поставил пакеты заново, и вот такая хрень в итоге

Сергей
16.10.2017
08:17:04
Ты установил FS модуль?!

Или это из вебпака выхлоп?

kana
16.10.2017
08:18:05
https://github.com/dvajs/dva
когда вижу "lightweight" и "elm-style" на жс, то становится сразу, это однозначно куча бойлерплейта ждет. Особенно пугает lightweight фреймворк. Чем он lightweight, тем он меньше делает сам, толку от такого фреймворка тогда

Tim
16.10.2017
08:18:22
Ты установил FS модуль?!
вроде ничего нового не устанавливал

Google
Tim
16.10.2017
08:19:56
Откуда мне знать, что там было уже
ну в зависимостях FS нет, разьве что какой-то из пакетов сам поставил в подзависимостях.

kana
16.10.2017
08:20:55
https://github.com/dvajs/dva
почти то же самое дает withReducer рекомпоса, хоть тут мб даже лучше. А, стоп, он не локальный. Короче, вроде неплохо

Tim
16.10.2017
08:21:48
Roman
16.10.2017
08:22:51
единственное что он от китайцев, со всеми вытекающими

Again
16.10.2017
08:57:37
Max
16.10.2017
08:58:00
Ты из контекста фразу прочитал

Admin
ERROR: S client not available

Max
16.10.2017
08:58:07
Весь тред возьми

Lupsick
16.10.2017
10:30:27
посоны, вы видели какой-нибудь адекватный drag&drop для дашбоардов?

Ruslan
16.10.2017
11:00:54
https://github.com/react-dropzone/react-dropzone Там как раз ментейра ищут

Aleksey
16.10.2017
11:03:42
Подскажите как можно увеличить скорость. Есть таблица с 1000 строками. При клике на каждую строку появлятся input. Дело в том, что это все очень медленно работает, как увеличить производительность?

Input onChange слишком медленно работает

ventris
16.10.2017
11:12:12
https://github.com/bvaughn/react-virtualized мб?

Aleksey
16.10.2017
11:19:18
Нет

Max
16.10.2017
11:24:13
попробуй ?

PureComponent / shouldComponentUpdate

Google
Aleksey
16.10.2017
11:24:57
Окей, спасибо

Igor
16.10.2017
11:25:09
+ иммутабельный стейт

Artyom
16.10.2017
12:17:18
Если onChange хендлер прокидывается через карирование или биндинг то тут shouldUpdateComponent не поможет, он будет функцию onChange считать всегда разной

Max
16.10.2017
12:18:39
с Pure будет такая херня, да

но можно в shouldComponentUpdate проверять только то что нужно

у recompose есть специальный НОС для проверки только пропертей из списка

Vladimir
16.10.2017
12:20:00
onlyUpdateForKeys

Ilya
16.10.2017
12:21:16
кто в реакте джуниор? Напишите в личку, тема есть

Сергей
16.10.2017
12:22:31
я тут обновил еслинт конфиги для любого жс: atmx.in/eslint-base для реакта atmx.in/eslint-react

Александр
16.10.2017
12:24:23
Подскажите пожалуйста, как в actions можно сделать опциональные парамемтры? Т.е. у меня был экшн, сечас я хочу его расширить, но не хочу ломать совместимость в других местах, есть для этого какие-нибудь способы?

Александр
16.10.2017
12:25:59
Проблема не в том, что я не знаю где сломается, я хочу сделать так что бы не сломалось

Было вот так: export const setCurrentData = (url) => { return (dispatch) => { dispatch({ type: 'REQUEST_CURRENT_DATA', payload: url }); FetchGet({ url, onSuccess: (data) => dispatch(receiveData(data)), onError: (error) => dispatch({ type: 'REQUEST_CURRENT_DATA_ERROR', payload: error }) }); }; }; Хочу сделать вот так: export const setCurrentData = (url, params) => { return (dispatch) => { dispatch({ type: 'REQUEST_CURRENT_DATA', payload: url }); FetchGet({ url, params, onSuccess: (data) => dispatch(receiveData(data)), onError: (error) => dispatch({ type: 'REQUEST_CURRENT_DATA_ERROR', payload: error }) }); }; };

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