0.2.0 • Published 2 years ago

@romr1ch/use-memo-action v0.2.0

Weekly downloads
-
License
ISC
Repository
github
Last release
2 years ago

use-memo-action

React hook for action redux memoization.

Установка

npm i @romr1ch/use-memo-action

Пример использования

Подключение middlewares и reducer.

Важно! Мидлвара throttleActionsMiddleware работает вместе с enchantAsyncActionsMiddleware. Установите npm i redux-enchant-async-actions, если это ещё не сделано.

import { createStore, combineReducers, applyMiddleware } from 'redux'
import { composeWithDevTools } from '@redux-devtools/extension'
import { memoReducer, throttleActionsMiddleware } from '@romr1ch/use-memo-action'
import enchantAsyncActionsMiddleware from 'redux-enchant-async-actions'

const rootReducer = combineReducers({
  // `memo` — обязательное название
  memo: memoReducer,
})

const store = createStore(
  rootReducer,
  composeWithDevTools(applyMiddleware(throttleActionsMiddleware(), enchantAsyncActionsMiddleware))
)

Использование

import React from 'react'
import { Provider } from 'react-redux'
import { createAction } from 'redux-actions'

interface Data {
  userId: number
  id: number
  title: string
  completed: boolean
}

type GetTodoPayload = ({ id }: { id: number }) => Promise<Data>

const getTodo = createAction<GetTodoPayload>('GET_TODO', () => {
  return async ({ id = 1 }) => {
    const response = await fetch(`https://jsonplaceholder.typicode.com/todos/${id}`)

    return await response.json()
  }
})

export function ComponentA() {
  const { data, error, status, meta } = useMemoAction(getTodo, { key: 'todo' })

  return <h1>ComponentA</h1>
}

export function ComponentB() {
  useMemoAction(getTodo, { key: 'todo' }, { id: 1 })

  return <h1>ComponentB</h1>
}

export function ComponentC() {
  useMemoAction(getTodo, { key: 'todo' })

  return <h1>ComponentC</h1>
}

function App() {
  return (
    <Provider store={store}>
      <ComponentA />
      <ComponentB />
      <ComponentC />
    </Provider>
  )
}

throttleActionsMiddleware

Опция

АргументТипПо умолчаниюОписание
timenumber60Устанавливается значение в милисикундах. Одни и те же экшены не будут отрабатывать за этот промержуток времени.

useMemoAction

Опции

АргументТипПо умолчаниюОписание
action*UseMemoActionAction-Может передаваться либо функцией, либо объектом, у которого payload должен возвращать функцию, которая ничего не принимает и возвращает Promise. Здесь можно делать запросы к серверу.
options*UseMemoActionOptions-Второй аргумент принимает объект, в котором необходимо передать ключ с уникальным значением ({ key: 'unic-value' }).
args{ key: string: any }{}Аргументы, которые хук передаст в возвращаемую функцию в экшене.

Возвращает

АргументТипПо умолчаниюОписание
dataanyundefinedРезультат экшена, если будет установлена ошибка, то undefined.
errorstring или falsefalseТекст ошибки или false, если её нет.
statusboolean-Зависит от error.
meta{ storePath: string }-Единственным свойством является storePath — путь для данных к хранилищу.

UseMemoActionOptions

СвойствоТипПо умолчаниюОписание
key*string-Уникальное значение, под котором будут храниться данные в хранилище.
ttlnumber60Устанавливает время, нахождении в кэше для конкретного экшена. Значение можно установить глобально для всех хуков в приложении.
0.2.0

2 years ago

0.1.0

2 years ago

0.0.3

2 years ago

0.0.2

2 years ago

0.0.1

2 years ago