Обновить
17
-1.6
Andrew Ka@comerc

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

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

Внезапно, reshadow benchmarks

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

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

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


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

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


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


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

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

Не понял, actix — это тоже про акторы.

Вы просто не умеете готовить 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

А тем временем holochain переехал с Actix на Riker:


Actix looks great:
  • actor system
  • stable rust (i think)
  • many github stars (~1500)
  • nested actors seem to work well and clearer support for call/response actor comms
    but has these limitations that looked like dealbreakers when i reviewed with the team:
  • roadmap is not covering what we would want in a generalised actor framework (e.g. persistence, event logs, actors over network, pluggable backends, etc.)
  • seems more monolithic, wasn't as clear how to plug it into our existing systems
  • the API broadly doesn't match our mental model of what we want to achieve here
    • for example, it doesn't seem to have actor references to pass around and plug into our state tree

  • docs are surprisingly unmaintained, riker has far more info, most of the actix docs are "TODO"

тынц


Вы его не рассматривали?

Первый пример прекрасно компилируется. Что я делаю не так?


fn main() {
    let mut jill = Person::new("Jill", 19);
    let jill_ref_mut = &mut jill;
    jill_ref_mut.celebrate_birthday();
    println!("{}", jill.name()); // невозможно заимствовать jill как неизменяемое
                                 // потому что это уже заимствовано как
                                 // изменяемое
}

(rustc 1.31.1)

Дополню. Вместо .to_string(), можно использовать .into()

А «Михаил» не строка?!

pub struct Person<'a> {
  pub name: &'a str,
}

fn main() {
  let me = Person {
    name: "Михаил",
  };
}

Rust: состояния типов — реализация на базе фантомных типов.

Прекрасные конечные автоматы на Rust — реализация на базе типажей From и Into.

Пошаговое тестирование в redux-saga.

Энтропия же. Это нормально.

Практически аналог моего Nexus7 V2. Перо добавилось и плюс один дюйм. А 12 дюймов — это как два раза по 7, я примерял. После него семидюймовый кажется нокией 3310.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность