
Ivan
12.07.2018
05:51:15
Ребят, всем привет. Возможно кто то сталкивался с таким паттерном: мне нужно пробросить во враппер компонента любые возможные синтетические обработчики реакта. Т.е. В контейнере я определяю функцию onClckCapture, передаю его как непредусмотренный атрибут компоненту. Но так как в дочернем компоненте во враппере он не предусмотрен и не вызывается,он работать не будет. но мне хотелось бы полностью управлять поведением компонента. {...this.props} в div враппер компонента использовать нельзя, так как оттуда может подтянуться всякая дичь. Фильтровать пропсы тоже. Как такое провернуть используя методы из реакт «коробки»?.

Maksym
12.07.2018
06:08:49
Самому інтересно, можно попробивать через контекст или редакс стор
Но точно нескаду мож ребята пробивали

Илья
12.07.2018
06:12:40

Google

RJ
12.07.2018
06:25:05
Гайз, есть идеи как менять куки экспресса при изменении стейта?

Ivan
12.07.2018
06:26:35
обработчики засунуть в один объект, а в компоненете {...this.props.wrapperHandlers}
Такой способ тоже не подходит. Так как мне нужно такое поведение для всех компонентов, а в таком случае нужно будет этот враппеер хэндлерс передавать в каждый компонент и делать спреад оператор внутри контейнера. Мой руководитель не согласиться. Он сейчас то полностью изолирует поведение компонентов, но из за этого теряешься огромные возможности управления ими.

Илья
12.07.2018
06:27:06
Компонент сам должен отвечать за свое поведение, а не его врапер

Ivan
12.07.2018
06:28:56
И назначить на враппер обработчики клавиатуры, мышки и т.д.

Илья
12.07.2018
06:30:34
Ну так компонент должен позволять навешивать обработчики, не совсем понимаю вашего кейса

Anton
12.07.2018
06:33:19
No 'Access-Control-Allow-Origin' header is present on the requested resource.
как можно решить?
в create-react-app делаю запрос через axios

Ivan
12.07.2018
06:36:30

Илья
12.07.2018
06:37:15
тогда только фильтр

Ivan
12.07.2018
06:37:24
Возможно через прокси объект.

Google

Ivan
12.07.2018
06:37:29
Ну вот фильтр тоже не подходит.

Evgeniy
12.07.2018
06:38:03

Ivan
12.07.2018
06:40:13
Возможно как то в пропс children children навесить конкретный обработчик?

Anton
12.07.2018
06:41:08

Evgeniy
12.07.2018
06:41:34
Что-то вроде того

Anton
12.07.2018
06:42:19
Но эта ж тема как то решается?

Nikita
12.07.2018
06:44:08

Anton
12.07.2018
06:45:04
Нет доступа к серверу

Ivan
12.07.2018
06:46:24
По-моему я нашёл выход. Интересно кому?

Vladislav
12.07.2018
06:47:07

Ivan
12.07.2018
06:48:58
Если я не ошибаюсь при деструктуризации объекта возможно использовать рест оператор и вот его во враппер и прокидывать {...restProos}
Только до раб компа дошёл. Сейчас проверю теорию.
Да, все работает. Т.е. при деструктуризации после всех полей обьекта, нужно ставить ...rest (как угодно можно назвать) и уже прокидывать в контйнер <div {...rest} >

Дмитрий
12.07.2018
07:02:41
Так а при прикидывании реста, ты как обезопасишь себя от лишнего в компоненте?

Cenator
12.07.2018
07:03:24

Дмитрий
12.07.2018
07:04:11
Ну там наверное указываешь что тебе нужно, а это мало чем отличается от обычного прокидывания пропсами, не?

Ivan
12.07.2018
07:10:46

Valeriy
12.07.2018
07:32:54

Ivan
12.07.2018
07:33:32

Google

Valeriy
12.07.2018
07:33:41
ты даже не представляешь себе как сложно потом поддерживать такой код,
когда твой коллега так чудит, прокидывая пропсы через 3-5 уровней используя ...rest

Ivan
12.07.2018
07:35:21

Valeriy
12.07.2018
07:36:27
Интересно мнение послушать почему
порой, чтобы разобраться что именно там пробрасывается, приходится как клубок разматывать приложение поднимаясь уровень за уровнем вверх в поисках передаваемой структуры
самое печальное когда данные приходят, тут же забиваются в редьюсер, потом коннектятся к контейнеру и далее нигде не расшифровываясь так и идут целой пачкой в виде {...props}
через какие 3-5 уровней?
имеется в виду <Component {...props} />
внутри этого Component рендерится еще <Component2 {...props} /> и т.д.

Ivan
12.07.2018
07:37:36
<Component text="123' onClick={console.log} />
внутри компонента
const {text, ...rest} = this.props
и в контейнер <div {...rest}> {text} </div>

Valeriy
12.07.2018
07:37:46
и вот когда эта структура не типизирована, очень сложно бывает понять что там должно быть, а чего нет
чтобы посмотрев на код ты сразу мог понять, какие пропсы явно проносятся
исключение - либы, например компонент типа TextInput
но в этих случаях обычно речь не идет о многоуровневых вложенностях

arikuza
12.07.2018
07:42:17

Max
12.07.2018
07:43:02
явное лучше неявного

Max
12.07.2018
07:43:26
поэтому все эти ...rest по миниимуму должны быть

Ivan
12.07.2018
07:43:40
Какие пропсы явно переносяться, за это в нашем проекте отвечает flow. Мне же нужен контроль над самими компонентами, чтобы я мог делать, например cloneElement.only(children, {onClickCapture: this.showNotification}); как обертку над компонентом, без ломания верстки и внутри оборачиваемого ребенка можно было управлять теми же событиями.

Valeriy
12.07.2018
07:44:44
ну я вот в проекте текущем с этими рестами столкнулся плотно...
человек, который это "подарил" проекту ушел
и теперь все это волшебство так сильно тормозит развитие, что просто не передать

Ivan
12.07.2018
07:44:48
Пока я не увидел минусов. Только если реально ...rest прокидывать как безумная обезьяна во все дочерние компоненты

Valeriy
12.07.2018
07:45:22

Oleg
12.07.2018
07:45:46

arikuza
12.07.2018
07:45:50

Valeriy
12.07.2018
07:46:05
но стоит подключить еще людей, которые начнут делать также, ты устанешь вносить изменения в такой код, править баги, разбираясь не только с логикой, но еще и с параметрами передаваемыми

Google

Ivan
12.07.2018
07:50:52
Я, наверно, не корректно довел мысль. Я понимаю о чем вы говорите, но мне нужно управление враппером компонента, а именно event handlers, другие пропсы, контексты и прочие атрибуты передаваться не будут и отслеживать этого не составит труда с возможностями IDE.

Oleg
12.07.2018
07:52:09

Admin
ERROR: S client not available

Ivan
12.07.2018
07:53:11
Хок будет работать для всего компонента, а если делается несколько экземпляров, для некоторых из них нужно сделать preventDefault.

blkmrkt
12.07.2018
07:59:31

Andrew
12.07.2018
08:13:09
Не знаю что это было ?
Хмммм что ж это могло быть, например пропсы 2 раза приходили

Nikita
12.07.2018
08:15:38
Ребята, где там группа по вебшторму (прости, господи)?
Или может кто-то может подсказать, как настроить там Prettier с eslintIntegration?

Roman
12.07.2018
08:16:29

Nikita
12.07.2018
08:17:17


Grigore
12.07.2018
08:22:30
Добрый день, пытаюсь настроить чтоб сборка реакт работала по туториалу https://medium.com/bucharestjs/upgrading-a-create-react-app-project-to-a-ssr-code-splitting-setup-9da57df2040a запускаю сервер через ноду указывая на файл с содержимым require('ignore-styles');
require('url-loader');
require('file-loader');
require('babel-register')({
ignore: [ /(node_modules)/ ],
presets: ['env', 'react-app'],
plugins: [
'syntax-dynamic-import',
'dynamic-import-node',
'react-loadable/babel'
]
});
require('./index'); а для оптимизации использую конфиг const webpack = require('webpack');
const path = require('path');
module.exports = {
entry: ['./server/index.js'],
target: 'node',
output: {
path: path.resolve(__dirname, 'server'),
filename: 'render-server-compiled.js',
},
module: {
rules: [
{
test: /js$/,
exclude: /(node_modules)/,
loader: 'babel-loader',
}
]
},
node: {
__dirname: true
},
plugins: [
new webpack.DefinePlugin({
'process.env': {
'NODE_ENV': JSON.stringify('production')
}
})
]
} конфиг использует .babelrc {
"presets": [
["env", {"modules": false, "targets": {"node": "current"}}],
"react-app"
],
"ignore": ["/(node_modules)/"],
"plugins": [
"syntax-dynamic-import",
"dynamic-import-node",
"react-loadable/babel"
]
} получаю в итоге ошибку```UnhandledPromiseRejectionWarning: Error: Cannot find module 'function () {
return require('../components/About');
}'``` где используется const About = Loadable({
loader: () => import('../components/About'),
loading: () => <div>loading...</div>
}) но вот если запускать через то, что выдаст вебпак, то проблем нет. Может кто подскажет что тут не так ?


Cenator
12.07.2018
08:22:49
Добрый день, пытаюсь настроить чтоб сборка реакт работала по туториалу https://medium.com/bucharestjs/upgrading-a-create-react-app-project-to-a-ssr-code-splitting-setup-9da57df2040a запускаю сервер через ноду указывая на файл с содержимым require('ignore-styles');
require('url-loader');
require('file-loader');
require('babel-register')({
ignore: [ /(node_modules)/ ],
presets: ['env', 'react-app'],
plugins: [
'syntax-dynamic-import',
'dynamic-import-node',
'react-loadable/babel'
]
});
require('./index'); а для оптимизации использую конфиг const webpack = require('webpack');
const path = require('path');
module.exports = {
entry: ['./server/index.js'],
target: 'node',
output: {
path: path.resolve(__dirname, 'server'),
filename: 'render-server-compiled.js',
},
module: {
rules: [
{
test: /js$/,
exclude: /(node_modules)/,
loader: 'babel-loader',
}
]
},
node: {
__dirname: true
},
plugins: [
new webpack.DefinePlugin({
'process.env': {
'NODE_ENV': JSON.stringify('production')
}
})
]
} конфиг использует .babelrc {
"presets": [
["env", {"modules": false, "targets": {"node": "current"}}],
"react-app"
],
"ignore": ["/(node_modules)/"],
"plugins": [
"syntax-dynamic-import",
"dynamic-import-node",
"react-loadable/babel"
]
} получаю в итоге ошибку```UnhandledPromiseRejectionWarning: Error: Cannot find module 'function () {
return require('../components/About');
}'``` где используется const About = Loadable({
loader: () => import('../components/About'),
loading: () => <div>loading...</div>
}) но вот если запускать через то, что выдаст вебпак, то проблем нет. Может кто подскажет что тут не так ?
@webpack_ru


Grigore
12.07.2018
08:23:16

blkmrkt
12.07.2018
08:36:44

Yuriy
12.07.2018
08:41:44
@javascript_jobs

Дмитрий
12.07.2018
08:50:50
ребят, есть какой то способ поставить минимальный размер файла для выноса в чанк в react-loadable?

Cenator
12.07.2018
08:56:06

Дмитрий
12.07.2018
08:58:04
да, но хотелось бы, чтобы это автоматом происходило)
чтобы не следить за каждым чанком

Cenator
12.07.2018
08:58:29
это антипаттерн

Google

Cenator
12.07.2018
08:58:47
ты выделяешь в лоаудабл только те, которые заведомо тяжелые

Дмитрий
12.07.2018
08:59:15
ок, я тебя понял, спасиб

lexxx
12.07.2018
09:29:33
Uncaught Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.
из за чего7?
ну в смысле у меня default импорты компонентов, почему появляется эта ошибка?

Dimanius851
12.07.2018
09:29:59
цитата: “joi + React state == best forms ever”

Cenator
12.07.2018
09:31:00

lexxx
12.07.2018
09:31:47
а импортируешь как
я знаю в чем различия, дело в том, что если я делаю именованый экспорт и импортирую именованный в кавычках ошибка все равно остается

Cenator
12.07.2018
09:32:15

Андрей
12.07.2018
09:37:20

lexxx
12.07.2018
09:37:28