Size: a a a

React — русскоговорящее сообщество

2020 November 02

OS

Oleg Shilov in React — русскоговорящее сообщество
вот код. максимально упростил.
есть компонент который изспользует генерики в пропах.
вопрос в том как правильно прокинуть тип в компонент FancyButton<A>
источник

S

Stanislav in React — русскоговорящее сообщество
Oleg Shilov
type Props<A> = { type: A };

export const FancyButton = forwardRef(function FancyButton<A>(
 { type }: Props<A>,
 ref: RefObject<HTMLButtonElement>
) {
 useImperativeHandle(ref, {
   focus: () => console.log("focus")
 });

 return (
   <button ref={ref} type={type}>
     Button
   </button>
 );
});

function Test() {
 const buttonRef = useRef(null);

 return <FancyButton<"submit"> type="submit" ref={buttonRef} />;
}
вам не кажется что прокидывать дженерик, тем более в вашем кейсе, это извращение?
источник

OS

Oleg Shilov in React — русскоговорящее сообщество
код который выше это просто пример того как я собираюсь это использовать.
вот кейс котроый я рассматриваю. есть виртуальная таблица. генериком указывается тип данных которые надо рендерить в каждой строке. через useImperativeHandle вывернуты методы для скролла таблицы.
источник

S

Stanislav in React — русскоговорящее сообщество
Oleg Shilov
код который выше это просто пример того как я собираюсь это использовать.
вот кейс котроый я рассматриваю. есть виртуальная таблица. генериком указывается тип данных которые надо рендерить в каждой строке. через useImperativeHandle вывернуты методы для скролла таблицы.
> генериком указывается тип данных для рендера

извините, но это похоже на тайпскрипт головного мозга, или я вас не понимаю, попробуйте отписать в @ts_ru
источник

GO

Green Orange in React — русскоговорящее сообщество
Oleg Shilov
вот код. максимально упростил.
есть компонент который изспользует генерики в пропах.
вопрос в том как правильно прокинуть тип в компонент FancyButton<A>
источник

OS

Oleg Shilov in React — русскоговорящее сообщество
спасибо. кастовать не подходит, враппер тоже не катит. уже полтора часа бьюсь.
источник

NK

Nikita Kravchenko in React — русскоговорящее сообщество
Здравствуйте, на этапе выбора инстрамента (next js vs gatsby) столкнулся с вопросом. Радует производительность gatsby, но как без дергания программиста из бэка пересобрать статическую генерацию?
Суть в том, чтобы данные после изменения в админке, изменялись на сайте. На nextjs можно комбинировать и задавать время жизни статической генерации. А вот с  gatsby не работал ранее. Подскажите как такое реализовать? И возможно  ли это вообще?
источник

И

Иван in React — русскоговорящее сообщество
Oleg Shilov
спасибо. кастовать не подходит, враппер тоже не катит. уже полтора часа бьюсь.
источник

И

Иван in React — русскоговорящее сообщество
Nikita Kravchenko
Здравствуйте, на этапе выбора инстрамента (next js vs gatsby) столкнулся с вопросом. Радует производительность gatsby, но как без дергания программиста из бэка пересобрать статическую генерацию?
Суть в том, чтобы данные после изменения в админке, изменялись на сайте. На nextjs можно комбинировать и задавать время жизни статической генерации. А вот с  gatsby не работал ранее. Подскажите как такое реализовать? И возможно  ли это вообще?
источник

OS

Oleg Shilov in React — русскоговорящее сообщество
спасибо, но вопрос в том что пропы с генериком.
вот более приближенный код
import React, { forwardRef, useImperativeHandle, useRef } from "react";

type Props<A> = {
 data: A[];
 columns: {
   title: string;
   key: keyof A;
 }[];
};
type RefHandlers = { scrollToBottom: () => void };
type TableData = { name: string; price: number };

export const Table = forwardRef(function Table<A>(
 { data, columns }: Props<A>,
 ref: RefHandlers
) {
 useImperativeHandle(ref, {
   scrollToBottom: () => {
     console.log("scrollToBottom");
   }
 });

 return (
   <table>
     {data.map((row, rowIndex) => {
       return (
         <tr key={rowIndex}>
           {columns.map((column, columnIndex) => {
             return <td key={columnIndex}>{row[column.key]}</td>;
           })}
         </tr>
       );
     })}
   </table>
 );
});

function Usage() {
 const tableRef = useRef<RefHandlers>(null);
 const columns = [
   {
     label: "Name",
     key: "name"
   },
   {
     label: "Price",
     key: "price"
   }
 ];
 const data = [
   { name: "foo", price: 100 },
   { name: "bar", price: 200 },
   { name: "baz", price: 300 }
 ];

 return <Table<TableData> ref={tableRef} data={data} columns={columns} />;
}
источник

И

Иван in React — русскоговорящее сообщество
Oleg Shilov
спасибо, но вопрос в том что пропы с генериком.
вот более приближенный код
import React, { forwardRef, useImperativeHandle, useRef } from "react";

type Props<A> = {
 data: A[];
 columns: {
   title: string;
   key: keyof A;
 }[];
};
type RefHandlers = { scrollToBottom: () => void };
type TableData = { name: string; price: number };

export const Table = forwardRef(function Table<A>(
 { data, columns }: Props<A>,
 ref: RefHandlers
) {
 useImperativeHandle(ref, {
   scrollToBottom: () => {
     console.log("scrollToBottom");
   }
 });

 return (
   <table>
     {data.map((row, rowIndex) => {
       return (
         <tr key={rowIndex}>
           {columns.map((column, columnIndex) => {
             return <td key={columnIndex}>{row[column.key]}</td>;
           })}
         </tr>
       );
     })}
   </table>
 );
});

function Usage() {
 const tableRef = useRef<RefHandlers>(null);
 const columns = [
   {
     label: "Name",
     key: "name"
   },
   {
     label: "Price",
     key: "price"
   }
 ];
 const data = [
   { name: "foo", price: 100 },
   { name: "bar", price: 200 },
   { name: "baz", price: 300 }
 ];

 return <Table<TableData> ref={tableRef} data={data} columns={columns} />;
}
а, ну TS так не очень умеет, увы
источник

OS

Oleg Shilov in React — русскоговорящее сообщество
Иван
а, ну TS так не очень умеет, увы
печалька(
источник

И

Иван in React — русскоговорящее сообщество
Oleg Shilov
печалька(
источник

RL

Ruslan Lev in React — русскоговорящее сообщество
Привет, смотрел кто курс с удеми "MERN eCommerce from scratch"?
источник

DS

Dmitry Sidorov in React — русскоговорящее сообщество
Иван
магия 🤷‍♂️

пробуй волшебное слово debugger
Нашёл) такое вызывала строка

return (//someting
)

а именно тупой комментарий, после билда строка складывалась и получалось что компонент ничего не возвращает
источник

T

TARAS in React — русскоговорящее сообщество
Ruslan Lev
Привет, смотрел кто курс с удеми "MERN eCommerce from scratch"?
источник

RL

Ruslan Lev in React — русскоговорящее сообщество
Благодарю, буду знать.
источник

A

Alexandr (Doberman) in React — русскоговорящее сообщество
Добрый вечер, хук useEffect без зависимостей равен хуку с зависимостью в виде пустого массива?
источник

АВ

Андрей Винокуров... in React — русскоговорящее сообщество
Alexandr (Doberman)
Добрый вечер, хук useEffect без зависимостей равен хуку с зависимостью в виде пустого массива?
Нет
источник

ДН

Да Нил in React — русскоговорящее сообщество
нет
источник