Pull to refresh
16K+
17
Andrew Ka@comerc

#кодеротбога

-9
Rating
114
Subscribers
Send message

Flutter? не, не слышал

Ок, jsx? не, не слышал

По мотивам Comparison of Domain-Driven Design and Clean Architecture Concepts. Если я правильно понял вопрос.

Из-за интеграции yarn wokspaces и lerna, пользуюсь только npx.

Автор reshadow максимально отзывчивый. К тому же это отечественный производитель. Очень надеюсь, что вывезет. Я лично вступил в ряды ранних последователей. Посмотрите, какая многообещающая презентация.

Я — большой любитель Material Design. Для React написана замечательная Material-библиотека, которая называется material-ui. У этой библиотеки есть лишь одна проблема. Это — её размер. Она очень велика. Даже если пользоваться лишь отдельными её компонентами, в бандл попадёт её реализация механизма CSS-in-JS, а это — примерно 30 Кб минифицированного кода. Каковы альтернативы? Я решил построить собственные компоненты, стилизуя их в процессе создания приложения.

Обнять и плакать. babel-plugin-import

Styled-components и так уже была одной из самых быстрых CSS-in-JS библиотек, но теперь мы еще быстрее

Внезапно, reshadow benchmarks

А я поковырял reshadow, пока рано отказываться от styled-components.

Спасибо за поддержку! Я помню Хабр маленьким. Вся его жизнь — большая часть моей.

Я колоссально нравственно страдал, пока добавлялись исключительно минусы. Рефлексия замучила. Но сейчас уже есть плюсы, а это значит, что оно кому-то надо, и со мной всё нормально.


Напротив, добивался выдать экстракт, чтобы на минимум текста максимум наполнения. Как мне ответил лучший друг, опять ты с места в карьер.

Заметка, как ответ на вопрос "зачем?", который был задан в коментарии на YouTube.


Хаб ReactJS — т.к. почти все стримы и репка "про это". Хаб GTD — потому что описываю свою методику повышения личной эффективности.


За что минусуют — мне непонятно.

Вентилятор сверху. Она так греется.

Вы просто не умеете готовить redux-act :)


import { createReducer, createAction } from 'redux-act'
import axios from 'axios'
import { API } from 'src/constants'

const NS = 'POST__'

const initialState = {
  item: {},
  isLoading: false,
}

export type IState = typeof initialState

const reducer = createReducer<IState>({}, initialState)

const readItemRequest = createAction(`${NS}READ_ITEM_REQUEST`)
reducer.on(readItemRequest, (state) => ({
  ...state,
  isLoading: true,
}))

const readItemSuccess = createAction<IState['item']>(`${NS}READ_ITEM_SUCCESS`)
reducer.on(readItemSuccess, (state, item) => ({
  ...state,
  item,
  isLoading: false,
}))

const readItemFailure = createAction(`${NS}READ_ITEM_FAILURE`)
reducer.on(readItemFailure, (state) => ({
  ...state,
  isLoading: false,
}))

export const readPost = (id: number): Store.IReduxThunkCallBack => (dispatch) => {
  dispatch(readItemRequest())
  return axios
    .get(`${API}posts/${id}/`)
    .then(({ data: item }) => {
      dispatch(readItemSuccess(item))
    })
    .catch((error) => {
      dispatch(readItemFailure())
      return Promise.reject(error)
    })
}

export default reducer

А общая обработка ошибок построена на соглашении, что все функции redux-thunk возвращают Promise:


export const dispatch = (action) => {
  if (isPromise(action)) {
    return store.dispatch(action).catch((error) => {
      if (error) {
        console.error(error)
      }
      return Promise.reject(error)
    })
  }
  return store.dispatch(action)
}

Компоненты должны дергать только эту обертку для store.dispatch() (вместо dispatch(), который приходит параметром в mapDispatchToProps() получаемого из connect()).


Конечно, большой соблазн обобщить шаблонный код: _REQUEST > вызов axios > _SUCCESS > _FAILURE, видел несколько реализаций, но теряется читабельность, на мой вкус.


Я сейчас в процессе очередной попытки получить "аленький цветочек", реализую шаблон проекта на стеке Create React App + Type Script + Antd Design Components + Styled Components.

Если найдёте какие-то другие фреймворки для акторов в Node.JS — пишите обязательно!

https://github.com/liangzeng/cqrs
https://github.com/tarantx/tarant

Information

Rating
Does not participate
Registered
Activity