ИВ
Size: a a a
ИВ
SB
АВ
Checkbox
Checkbox.cssНужно сразу сделать это и для других платформ
Checkbox.tsx
Checkbox@desktop.tsxКоторые будут просто проксирующими заглушками common.
Checkbox@touch-phone.tsx
_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 становится практически обязательной частью (но это не точно).EW
Checkbox
Checkbox.cssНужно сразу сделать это и для других платформ
Checkbox.tsx
Checkbox@desktop.tsxКоторые будут просто проксирующими заглушками common.
Checkbox@touch-phone.tsx
_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 становится практически обязательной частью (но это не точно).SB
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 };
}
Но правда кажется всё это сомнительным...SB
RP
useContext<{product: IProduct}>(ProductCardContext)SB
useContext<{product: IProduct}>(ProductCardContext)RP
SB
AY
AY
DB
AY
Р
DB
EW
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 };
}
Но правда кажется всё это сомнительным...Nullable, для этого и используется ts 🙂 либо укажи, что это свойство есть всегда, тогда бесполезный хелпер с приведением типов тебе не нужен будетComponent/Component.hooks | Component/Component.const (если это код только про этот компонент)SB
Nullable, для этого и используется ts 🙂 либо укажи, что это свойство есть всегда, тогда бесполезный хелпер с приведением типов тебе не нужен будетComponent/Component.hooks | Component/Component.const (если это код только про этот компонент)EW
null