page.mdx 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. import { pageMetadata } from "@/lib/page-metadata"
  2. export const metadata = pageMetadata("docs/api/redux")
  3. # @json-render/redux
  4. Redux / Redux Toolkit adapter for json-render's `StateStore` interface.
  5. ## Installation
  6. ```bash
  7. npm install @json-render/redux @json-render/core @json-render/react redux
  8. # or with Redux Toolkit (recommended):
  9. npm install @json-render/redux @json-render/core @json-render/react @reduxjs/toolkit
  10. ```
  11. ## reduxStateStore
  12. Create a `StateStore` backed by a Redux store.
  13. ```typescript
  14. import { reduxStateStore } from "@json-render/redux";
  15. ```
  16. ### Options
  17. <table>
  18. <thead>
  19. <tr>
  20. <th>Option</th>
  21. <th>Type</th>
  22. <th>Required</th>
  23. <th>Description</th>
  24. </tr>
  25. </thead>
  26. <tbody>
  27. <tr>
  28. <td><code>store</code></td>
  29. <td><code>Store</code></td>
  30. <td>Yes</td>
  31. <td>The Redux store instance.</td>
  32. </tr>
  33. <tr>
  34. <td><code>selector</code></td>
  35. <td><code>{'(state: S) => StateModel'}</code></td>
  36. <td>No</td>
  37. <td>Select the json-render slice from the Redux state tree. Defaults to <code>{'(state) => state'}</code>.</td>
  38. </tr>
  39. <tr>
  40. <td><code>dispatch</code></td>
  41. <td><code>{'(nextState: StateModel, store: Store) => void'}</code></td>
  42. <td>Yes</td>
  43. <td>Dispatch an action that replaces the selected slice with the next state.</td>
  44. </tr>
  45. </tbody>
  46. </table>
  47. ### Example
  48. ```typescript
  49. import { configureStore, createSlice } from "@reduxjs/toolkit";
  50. import { reduxStateStore } from "@json-render/redux";
  51. import { StateProvider } from "@json-render/react";
  52. const uiSlice = createSlice({
  53. name: "ui",
  54. initialState: { count: 0 } as Record<string, unknown>,
  55. reducers: {
  56. replaceUiState: (_state, action) => action.payload,
  57. },
  58. });
  59. const reduxStore = configureStore({
  60. reducer: { ui: uiSlice.reducer },
  61. });
  62. const store = reduxStateStore({
  63. store: reduxStore,
  64. selector: (state) => state.ui,
  65. dispatch: (next, s) => s.dispatch(uiSlice.actions.replaceUiState(next)),
  66. });
  67. ```
  68. ```tsx
  69. <StateProvider store={store}>
  70. {/* json-render reads/writes go through Redux */}
  71. </StateProvider>
  72. ```
  73. ## Re-exports
  74. <table>
  75. <thead>
  76. <tr>
  77. <th>Export</th>
  78. <th>Source</th>
  79. </tr>
  80. </thead>
  81. <tbody>
  82. <tr>
  83. <td><code>StateStore</code></td>
  84. <td><code>@json-render/core</code></td>
  85. </tr>
  86. </tbody>
  87. </table>