Size: a a a

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

2020 November 15

VK

Vladimir Klimov in React — русскоговорящее сообщество
Nikolay Tolochnyy
так исторически сложилось (с) :D
Ну, если весь проект  большой на классах написан -  может это и оправданно, просто чтобы была консистентность...
источник

EY

Eagle Owl Yoll in React — русскоговорящее сообщество
Я хочу весь менеджмент состояния перенести в отдельный класс, чтобы в самом компоненте видеть только отрисовку
const MyComponent: FC = () => {
  const store = new MyComponentStore()

  return <div>{store.someValue}</div>
}

// Конструктор стора
   constructor() {
       [this.paginationIsLoading, this.setPaginationIsLoading] = useState<boolean>(false);
       [this.lce, this.setLce] = useState<LceState>(LceState.Loading);
       [this.table, this.setTable] = ReportPlannedState.useTable();
       [this.filters, this.setFilters] = ReportPlannedState.useFilters();

       useEffect(() => {
           this.componentDidMount()
           return this.componentWillUnmount
       }, []);
   }

   private readonly componentDidMount = () => {
       this.loadReportFromFirstPage();
       window.addEventListener('scroll', this.onScroll)
   }

   private readonly componentWillUnmount = () => {
       window.removeEventListener('scroll', this.onScroll)
   }

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

И

Иван in React — русскоговорящее сообщество
Eagle Owl Yoll
Я хочу весь менеджмент состояния перенести в отдельный класс, чтобы в самом компоненте видеть только отрисовку
const MyComponent: FC = () => {
  const store = new MyComponentStore()

  return <div>{store.someValue}</div>
}

// Конструктор стора
   constructor() {
       [this.paginationIsLoading, this.setPaginationIsLoading] = useState<boolean>(false);
       [this.lce, this.setLce] = useState<LceState>(LceState.Loading);
       [this.table, this.setTable] = ReportPlannedState.useTable();
       [this.filters, this.setFilters] = ReportPlannedState.useFilters();

       useEffect(() => {
           this.componentDidMount()
           return this.componentWillUnmount
       }, []);
   }

   private readonly componentDidMount = () => {
       this.loadReportFromFirstPage();
       window.addEventListener('scroll', this.onScroll)
   }

   private readonly componentWillUnmount = () => {
       window.removeEventListener('scroll', this.onScroll)
   }

Мне не нравится, что экземпляр стора в этом случае создаётся на маунте, на анмаунте и на ререндере. В случае классового компонента я его могу спокойно объявить только единожды в конструкторе.
Ты можешь и один раз инстанциировать в функциональном компоненте
источник

EY

Eagle Owl Yoll in React — русскоговорящее сообщество
Иван
Ты можешь и один раз инстанциировать в функциональном компоненте
А можете подсказать, куда копать? Если этот вопрос решаем без кучи писанины, то меня и FC на 100% устроит.
источник

NT

Nikolay Tolochnyy in React — русскоговорящее сообщество
https://reactjs.org/docs/hooks-effect.html если я конечно правильно понял
источник

VK

Vladimir Klimov in React — русскоговорящее сообщество
Eagle Owl Yoll
Я хочу весь менеджмент состояния перенести в отдельный класс, чтобы в самом компоненте видеть только отрисовку
const MyComponent: FC = () => {
  const store = new MyComponentStore()

  return <div>{store.someValue}</div>
}

// Конструктор стора
   constructor() {
       [this.paginationIsLoading, this.setPaginationIsLoading] = useState<boolean>(false);
       [this.lce, this.setLce] = useState<LceState>(LceState.Loading);
       [this.table, this.setTable] = ReportPlannedState.useTable();
       [this.filters, this.setFilters] = ReportPlannedState.useFilters();

       useEffect(() => {
           this.componentDidMount()
           return this.componentWillUnmount
       }, []);
   }

   private readonly componentDidMount = () => {
       this.loadReportFromFirstPage();
       window.addEventListener('scroll', this.onScroll)
   }

   private readonly componentWillUnmount = () => {
       window.removeEventListener('scroll', this.onScroll)
   }

Мне не нравится, что экземпляр стора в этом случае создаётся на маунте, на анмаунте и на ререндере. В случае классового компонента я его могу спокойно объявить только единожды в конструкторе.
Это вы хуки используете где-то вне компонентов, чтоль?
Вот это reportPlannedState.useSmth ?
Типа, что это за конструктор
источник

II

Ilya Izilanov in React — русскоговорящее сообщество
Это даже будет работать вроде как только непонятно зачем
источник

И

Иван in React — русскоговорящее сообщество
Eagle Owl Yoll
А можете подсказать, куда копать? Если этот вопрос решаем без кучи писанины, то меня и FC на 100% устроит.
const useStore = Store => {
 const storeRef = useRef()

 useEffect(() => {
   storeRef.current = new Store()
 }, [])

 return storeRef.current
}


const store = useStore(MyStore)



Как именно и когда инициализировать стор — тебе решать, зависит от обстоятельств.
источник

EY

Eagle Owl Yoll in React — русскоговорящее сообщество
Vladimir Klimov
Это вы хуки используете где-то вне компонентов, чтоль?
Вот это reportPlannedState.useSmth ?
Типа, что это за конструктор
Это просто функции, которые являются сокращениями от useState<StateType>(initialState). Я их просто запрятал в отдельный файл.
источник

AQ

Ace Qnemes in React — русскоговорящее сообщество
Приветы, кто-нибудь работал с Netlify lambda и axios для сокрытия ключа АПИ?
источник

EY

Eagle Owl Yoll in React — русскоговорящее сообщество
Иван
const useStore = Store => {
 const storeRef = useRef()

 useEffect(() => {
   storeRef.current = new Store()
 }, [])

 return storeRef.current
}


const store = useStore(MyStore)



Как именно и когда инициализировать стор — тебе решать, зависит от обстоятельств.
Спасибо большое.
источник

VK

Vladimir Klimov in React — русскоговорящее сообщество
Eagle Owl Yoll
Это просто функции, которые являются сокращениями от useState<StateType>(initialState). Я их просто запрятал в отдельный файл.
Но это внутри класса написано?
источник

II

Ilya Izilanov in React — русскоговорящее сообщество
Eagle Owl Yoll
Это просто функции, которые являются сокращениями от useState<StateType>(initialState). Я их просто запрятал в отдельный файл.
хуки не рекомендуется использовать где либо кроме хуков и компонентов, если хочется отделять логику от представления лучше вынести в отдельный хук
источник

EY

Eagle Owl Yoll in React — русскоговорящее сообщество
Ilya Izilanov
хуки не рекомендуется использовать где либо кроме хуков и компонентов, если хочется отделять логику от представления лучше вынести в отдельный хук
Сильно напрягу, если попрошу пример, как вы делаете? Или то, что Иван написал, это оно и есть? Для меня после MobX прямая работа со стейтом это пока китайская грамота. Про useRef пока буду читать доку.
источник

II

Ilya Izilanov in React — русскоговорящее сообщество
источник

EY

Eagle Owl Yoll in React — русскоговорящее сообщество
Большое спасибо.
источник

И

Иван in React — русскоговорящее сообщество
Eagle Owl Yoll
Сильно напрягу, если попрошу пример, как вы делаете? Или то, что Иван написал, это оно и есть? Для меня после MobX прямая работа со стейтом это пока китайская грамота. Про useRef пока буду читать доку.
Прочитаешь и будешь знать всё, что нужно


https://overreacted.io/react-as-a-ui-runtime/
https://overreacted.io/a-complete-guide-to-useeffect/
источник

EY

Eagle Owl Yoll in React — русскоговорящее сообщество
Иван
Прочитаешь и будешь знать всё, что нужно


https://overreacted.io/react-as-a-ui-runtime/
https://overreacted.io/a-complete-guide-to-useeffect/
Ещё раз огромное спасибо. Прямо сейчас приступлю.
источник

II

Ilya Izilanov in React — русскоговорящее сообщество
Иван
Прочитаешь и будешь знать всё, что нужно


https://overreacted.io/react-as-a-ui-runtime/
https://overreacted.io/a-complete-guide-to-useeffect/
для начала тяжело, сам дэн говорит в первой статье
источник

VK

Vladimir Klimov in React — русскоговорящее сообщество
Ilya Izilanov
для начала тяжело, сам дэн говорит в первой статье
Так человек вроде не начинающий
источник