Size: a a a

2019 July 13

ИВ

Игорь Воробьев in БЭМ
Sergey Berezhnoy
форму же можно настроить как угодно... какой вектор атаки смущает?
пока смуoает, что покапавшись в js можно перехватывать платежные данные, встает вопрос как можно обезопасить js, стек bem-express
источник

SB

Sergey Berezhnoy in БЭМ
Игорь Воробьев
пока смуoает, что покапавшись в js можно перехватывать платежные данные, встает вопрос как можно обезопасить js, стек bem-express
«покопавшись в js» можно перехватывать данные независимо от фреймворка и библиотек
источник

G

GLASS in БЭМ
не читал в чем вопрос(лень), но ответ таков шифрование с помощью RSA
источник
2019 July 14

АВ

Антон Виноградов in БЭМ
Sergey Belozyorcev
@awinogradov @tadatuta вопрос по bem-react. На сколько я понимаю хорошей практикой является создание заготовок блока сразу под нескольких платформ.

Т.е. если мы создаём какой-то блок, например Checkbox

Checkbox.css
Checkbox.tsx

Нужно сразу сделать это и для других платформ
Checkbox@desktop.tsx
Checkbox@touch-phone.tsx

Которые будут просто проксирующими заглушками common.

Тоже самое касается и всех модификторов

_size/Checkbox_size_l.css
_size/Checkbox_size_l.tsx
_size/Checkbox_size_l@desktop.tsx
_size/Checkbox_size_l@touch-phone.css
_size/Checkbox_size_l@touch-phone.tsx

И элементов
Box/Checkbox-Box.css
Box/Checkbox-Box.tsx
Box/Checkbox-Box@desktop.tsx
Box/Checkbox-Box@touch-phone.css
Box/Checkbox-Box@touch-phone.tsx

Т.е. если мы сейчас находимся в рамках платформы touch-phone, то подключение блоков из common является плохим тоном.

// MyBlock@touch-phone.tsx
import { Checkbox } from '../components/Checkbox/Checkbox'
import { withSizeL } from '../components/Checkbox/_size/Checkbox_size_l'

Такое подключение может вести к неожиданным последствиям.
Т.к. где-то внутри дерева (или в другом месте) будут быть подключены стили именно платформы
Либо изначально была одна общая версия Checkbox без разбивки на платформы

// MyDeepBlock@touch-phone.tsx
import { Checkbox } from '../components/Checkbox/Checkbox@touch-phone'
import { withSizeL } from '../components/Checkbox/_size/Checkbox_size_l@touch-phone'

В результате чего наш MyBlock, который использовал стили из common будет выглядеть не как задумывался.

В таком кейсе использование @bem-react/di становится практически обязательной частью (но это не точно).
Если я все правильно понял, то ты говоришь, что можно где-то подключить не то и блок будет выглядеть не так. Конечно, такое может быть. Ответ здесь очень простой — надо подключать то :)
источник
2019 July 15

EW

Eugeniy World in БЭМ
Sergey Belozyorcev
@awinogradov @tadatuta вопрос по bem-react. На сколько я понимаю хорошей практикой является создание заготовок блока сразу под нескольких платформ.

Т.е. если мы создаём какой-то блок, например Checkbox

Checkbox.css
Checkbox.tsx

Нужно сразу сделать это и для других платформ
Checkbox@desktop.tsx
Checkbox@touch-phone.tsx

Которые будут просто проксирующими заглушками common.

Тоже самое касается и всех модификторов

_size/Checkbox_size_l.css
_size/Checkbox_size_l.tsx
_size/Checkbox_size_l@desktop.tsx
_size/Checkbox_size_l@touch-phone.css
_size/Checkbox_size_l@touch-phone.tsx

И элементов
Box/Checkbox-Box.css
Box/Checkbox-Box.tsx
Box/Checkbox-Box@desktop.tsx
Box/Checkbox-Box@touch-phone.css
Box/Checkbox-Box@touch-phone.tsx

Т.е. если мы сейчас находимся в рамках платформы touch-phone, то подключение блоков из common является плохим тоном.

// MyBlock@touch-phone.tsx
import { Checkbox } from '../components/Checkbox/Checkbox'
import { withSizeL } from '../components/Checkbox/_size/Checkbox_size_l'

Такое подключение может вести к неожиданным последствиям.
Т.к. где-то внутри дерева (или в другом месте) будут быть подключены стили именно платформы
Либо изначально была одна общая версия Checkbox без разбивки на платформы

// MyDeepBlock@touch-phone.tsx
import { Checkbox } from '../components/Checkbox/Checkbox@touch-phone'
import { withSizeL } from '../components/Checkbox/_size/Checkbox_size_l@touch-phone'

В результате чего наш MyBlock, который использовал стили из common будет выглядеть не как задумывался.

В таком кейсе использование @bem-react/di становится практически обязательной частью (но это не точно).
Как это у нас:
1. Мы все подключаем через di, соответственно сами решаем, что туда положить, в конечном итоге ты работаешь только с интерфейсом, а реализация где-то под капотом (в реестрах)
2. У нас есть сборка, которая собирает компоненты и делает ре-экспорты с common если нету реализации на платформе
источник
2019 July 16

SB

Sergey Belozyorcev in БЭМ
@yarastqt @awinogradov  Eсть вопрос...

Мы часто используем в bemxjst кейсы с прокидыванием в node данных, чтобы из элементов получить к ним доступ.
А не прокидывать их через каждый элемент..

В React есть context, что вроде как логично использовать.

// ProductCard.tsx
export interface ProductCardProps extends IClassNameProps {
   product: IProduct
}

export type ProductCardContextProps = {
   product: Nullable<IProduct>
}

export const ProductCardContext = React.createContext<ProductCardContextProps>({ product: null });

export const cnProductCard = cn('ProductCard');

export const ProductCard: FC<ProductCardProps> = ({
   product,
   className,
   children,
   ...props
}) => {
   const contextData = { product };

   return (
       <div {...props} className={cnProductCard(null, [className])}>
           <ProductCardContext.Provider value={contextData}>
               {children}
           </ProductCardContext.Provider>
       </div>
   )
}

В элементах используем useContext(ProductCardContext).
Но...  Из-за обязательного default  в api контекста в элементах приходится делать проверку на product

const { product } = useContext(ProductCardContext);
if(product) { ... }
Как вариант, можно сделать свой хук, для вытаскивания данных

useProductCardContext = () => {
 const { product } = useContext(ProductCardContext);
 return { product: product as IProduct };
}

Но правда кажется всё это сомнительным...

Вопросы:
1. На сколько этот подход нормальный?
2. Где лучше хранить хук и контекст?
источник

SB

Sergey Belozyorcev in БЭМ
@tadatuta тебя тоже думаю можно подключить к вопросу выше :)
источник

RP

Roman Poleguev in БЭМ
Так не поможет?
useContext<{product: IProduct}>(ProductCardContext)

Вроде по тайпингам должно
https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/react/index.d.ts#L837
источник

SB

Sergey Belozyorcev in БЭМ
Вполне возможно, но много букв нужно писать в каждом элементе, который использует контекст данных блока.

Вопрос в другом, я описал выше :)
источник

RP

Roman Poleguev in БЭМ
Соре, не писал на олдскульном bemxjst) Но писал на реакте, вроде прокидывать данные правильно через компоненты-контейнеры (ProductContainer), а компоненты-отображения (ProductCard) (и вложенные в них другие компоненты-отображения (ProductSkus например)) оставить без логики получения данных. Типа реиспользовать компоненты отображения сможешь потом и рефачить проще, отделяешь данные от логики отображения. В контейнере уже извлекаешь данные, через context, или через коннект к redux, тут вариантов много. Если правильно понял твой вопрос. А про то, что прикидывать пропсы в глубь - это нормально, но не когда все состояние приложения гуляет по компонентам, или вложенность уж сильно большая)
источник
2019 July 17

SB

Sergey Belozyorcev in БЭМ
Roman Poleguev
Соре, не писал на олдскульном bemxjst) Но писал на реакте, вроде прокидывать данные правильно через компоненты-контейнеры (ProductContainer), а компоненты-отображения (ProductCard) (и вложенные в них другие компоненты-отображения (ProductSkus например)) оставить без логики получения данных. Типа реиспользовать компоненты отображения сможешь потом и рефачить проще, отделяешь данные от логики отображения. В контейнере уже извлекаешь данные, через context, или через коннект к redux, тут вариантов много. Если правильно понял твой вопрос. А про то, что прикидывать пропсы в глубь - это нормально, но не когда все состояние приложения гуляет по компонентам, или вложенность уж сильно большая)
Зря не писал ;)
источник
2019 July 19

AY

Alexey Yakovlev in БЭМ
Владимир и Алексей, спасибо за митап и DI идей бэма в частности)) Было действительно интересно!
источник

AY

Alexey Yarrr (qfox) in БЭМ
Alexey Yakovlev
Владимир и Алексей, спасибо за митап и DI идей бэма в частности)) Было действительно интересно!
Рад служить)
https://gist.github.com/zxqfox/29f0cb35fc4582c9b2f4315523d199b4 — ссылки на материалы по темам, схожим с темой презентации. В т.ч. добавил ссылку на стенд с компонентами на whitepaper
источник
2019 July 20

DB

Dmitry Belousov in БЭМ
Спасибо за БЭМап, было очень интересно
источник

AY

Alexey Yarrr (qfox) in БЭМ
Коллеги, доброе утро.

У нас есть новость. Вчера на бэмапе мы делились стендом, который можно развернуть локально, чтобы пособирать свои темы.

Свершилось чудо и теперь не нужно устанавливать node.js, клонировать репозиторий и запускать npm install, npm start - стенд доступен всем и сразу, а своими темами вы можете делится в один клик (нужен аккаунт на github, чтобы сохранить ваше творение).

Стенд доступен по ссылке: https://codesandbox.io/s/whitepaper-controls-demo-vcvu6

Хорошего вам настроения)
источник

Р

Роман in БЭМ
Alexey Yarrr (qfox)
Коллеги, доброе утро.

У нас есть новость. Вчера на бэмапе мы делились стендом, который можно развернуть локально, чтобы пособирать свои темы.

Свершилось чудо и теперь не нужно устанавливать node.js, клонировать репозиторий и запускать npm install, npm start - стенд доступен всем и сразу, а своими темами вы можете делится в один клик (нужен аккаунт на github, чтобы сохранить ваше творение).

Стенд доступен по ссылке: https://codesandbox.io/s/whitepaper-controls-demo-vcvu6

Хорошего вам настроения)
🎉🎉🎉
источник
2019 July 21

DB

Dmitry Belousov in БЭМ
👍
источник
2019 July 22

EW

Eugeniy World in БЭМ
Sergey Belozyorcev
@yarastqt @awinogradov  Eсть вопрос...

Мы часто используем в bemxjst кейсы с прокидыванием в node данных, чтобы из элементов получить к ним доступ.
А не прокидывать их через каждый элемент..

В React есть context, что вроде как логично использовать.

// ProductCard.tsx
export interface ProductCardProps extends IClassNameProps {
   product: IProduct
}

export type ProductCardContextProps = {
   product: Nullable<IProduct>
}

export const ProductCardContext = React.createContext<ProductCardContextProps>({ product: null });

export const cnProductCard = cn('ProductCard');

export const ProductCard: FC<ProductCardProps> = ({
   product,
   className,
   children,
   ...props
}) => {
   const contextData = { product };

   return (
       <div {...props} className={cnProductCard(null, [className])}>
           <ProductCardContext.Provider value={contextData}>
               {children}
           </ProductCardContext.Provider>
       </div>
   )
}

В элементах используем useContext(ProductCardContext).
Но...  Из-за обязательного default  в api контекста в элементах приходится делать проверку на product

const { product } = useContext(ProductCardContext);
if(product) { ... }
Как вариант, можно сделать свой хук, для вытаскивания данных

useProductCardContext = () => {
 const { product } = useContext(ProductCardContext);
 return { product: product as IProduct };
}

Но правда кажется всё это сомнительным...

Вопросы:
1. На сколько этот подход нормальный?
2. Где лучше хранить хук и контекст?
Сорян, чет не увидел раньше:
1. Подход вполне норм, у нас где-то такое же используется точно, насчет проверок, у тебя же явно в интерфейсе сказано Nullable, для этого и используется ts 🙂 либо укажи, что это свойство есть всегда, тогда бесполезный хелпер с приведением типов тебе не нужен будет
2. Мы обычно создаем технологию внутри компонента Component/Component.hooks | Component/Component.const (если это код только про этот компонент)
источник

SB

Sergey Belozyorcev in БЭМ
Eugeniy World
Сорян, чет не увидел раньше:
1. Подход вполне норм, у нас где-то такое же используется точно, насчет проверок, у тебя же явно в интерфейсе сказано Nullable, для этого и используется ts 🙂 либо укажи, что это свойство есть всегда, тогда бесполезный хелпер с приведением типов тебе не нужен будет
2. Мы обычно создаем технологию внутри компонента Component/Component.hooks | Component/Component.const (если это код только про этот компонент)
Я возможно туплю, но при создании контекста он требует дефолтные данные (а контекст объявляется до кода шаблона).
Но тут нужно либо создавать скелет на основе объетка товара, либо через Nullable.... И далее через хук говорить, что товар есть всегда.
источник

EW

Eugeniy World in БЭМ
Sergey Belozyorcev
Я возможно туплю, но при создании контекста он требует дефолтные данные (а контекст объявляется до кода шаблона).
Но тут нужно либо создавать скелет на основе объетка товара, либо через Nullable.... И далее через хук говорить, что товар есть всегда.
Вот пример, как можно сделать — https://codesandbox.io/s/naughty-grass-girht, я там написал комментарий про null
источник