{"id":13474839,"url":"https://github.com/rematch/rematch","last_synced_at":"2025-05-12T13:08:22.562Z","repository":{"id":38433449,"uuid":"105411913","full_name":"rematch/rematch","owner":"rematch","description":"The Redux Framework","archived":false,"fork":false,"pushed_at":"2023-09-27T10:20:18.000Z","size":24030,"stargazers_count":8451,"open_issues_count":26,"forks_count":417,"subscribers_count":102,"default_branch":"main","last_synced_at":"2025-05-12T13:07:53.612Z","etag":null,"topics":["angular","hacktoberfest","immer","javascript","react","react-native","react-redux","redux","redux-best-practices","redux-made-easy","rematch","state-management","typescript","vue"],"latest_commit_sha":null,"homepage":"https://rematchjs.org","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rematch.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null},"funding":{"github":["semoal"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2017-10-01T01:29:27.000Z","updated_at":"2025-05-12T02:05:24.000Z","dependencies_parsed_at":"2022-07-11T02:51:21.744Z","dependency_job_id":"a4265e5a-c756-4dab-a1e9-a7a3b5619645","html_url":"https://github.com/rematch/rematch","commit_stats":{"total_commits":1267,"total_committers":108,"mean_commits":"11.731481481481481","dds":0.5201262825572217,"last_synced_commit":"3473ff484608bfd021538505a3218593715ad9f3"},"previous_names":[],"tags_count":164,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rematch%2Frematch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rematch%2Frematch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rematch%2Frematch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rematch%2Frematch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rematch","download_url":"https://codeload.github.com/rematch/rematch/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253745155,"owners_count":21957317,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["angular","hacktoberfest","immer","javascript","react","react-native","react-redux","redux","redux-best-practices","redux-made-easy","rematch","state-management","typescript","vue"],"created_at":"2024-07-31T16:01:15.234Z","updated_at":"2025-05-12T13:08:22.411Z","avatar_url":"https://github.com/rematch.png","language":"TypeScript","readme":"\u003cdiv align=\"center\"\u003e\n\u003ch1\u003eRematch\u003csub\u003ejs\u003c/sub\u003e\u003c/h1\u003e\n\nRematch is Redux best practices without the boilerplate. No more action types, action creators, switch statements or thunks in less than 1.4 kilobytes.\n\n\u003chr /\u003e\n\n[![Chat on Discord](https://img.shields.io/badge/discord-rematch-purple.svg?logo=discord\u0026style=flat-square)](https://discord.gg/zMzsMGvEHk) ![Rematch CI](https://github.com/rematch/rematch/workflows/Rematch%20CI/badge.svg?branch=main) [![Bundle size](https://img.shields.io/bundlephobia/minzip/@rematch/core?style=flat-square)](https://img.shields.io/badge/bundlesize-~5kb-brightgreen.svg?style=flat-square) [![File size](https://img.shields.io/badge/dependencies-redux-brightgreen.svg?style=flat-square)](https://img.shields.io/badge/dependencies-redux-brightgreen.svg?style=flat-square) [![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg?style=flat-square)](https://lerna.js.org/) [![https://img.shields.io/lgtm/grade/javascript/github/rematch/rematch?logo=typescript](https://img.shields.io/lgtm/grade/javascript/github/rematch/rematch?logo=typescript)](https://lgtm.com/projects/g/rematch/rematch?mode=list)  [![Gitpod Ready-to-Code](https://img.shields.io/badge/Gitpod-Ready--to--Code-blue?logo=gitpod)](https://gitpod.io/from-referrer/)\n\n\n[**Documentation**](https://rematchjs.org)  · [**Quickstart**](https://rematchjs.org/docs/getting-started/installation) · [**Examples**](https://rematchjs.org/examples/) · [**Contribute**](./CONTRIBUTING.md) · [**Licence**](#licence)\n\n\u003c/div\u003e\n\n## Features\n\nRedux is an amazing state management tool, supported by a healthy middleware ecosystem and excellent devtools.\nRematch builds upon Redux by reducing boilerplate and enforcing best practices. It provides the following features:\n\n- No configuration needed\n- Reduces Redux boilerplate\n- Built-in side-effects support\n- [React Devtools](https://github.com/facebook/react/tree/master/packages/react-devtools) support\n- TypeScript support\n- Supports dynamically adding reducers\n- Supports hot-reloading\n- Allows to create multiple stores\n- Supports React Native\n- Extendable with plugins\n- Many plugins available out of the box:\n    - for persisting data with [redux-persist](https://github.com/rt2zz/redux-persist)\n    - for wrapping state with [immer.js](https://github.com/immerjs/immer)\n    - for creating selectors with [reselect](https://github.com/reduxjs/reselect)\n    - ...and others\n\n## Are you ready to use Rematch?\n\nIn a few lines you can get easily asynchronous calls to an external API and data stored globally. It's amazing, with Redux you will needs tons of boilerplate, libraries and extra configuration.\n\n```ts\ntype PlayersState = {\n    players: PlayerModel[]\n}\n\nexport const players = createModel\u003cRootModel\u003e()({\n    state: {\n        players: [],\n    } as PlayersState,\n    reducers: {\n        SET_PLAYERS: (state: PlayersState, players: PlayerModel[]) =\u003e {\n            return {\n                ...state,\n                players,\n            }\n        },\n    },\n    effects: (dispatch) =\u003e {\n        const { players } = dispatch\n        return {\n            async getPlayers(): Promise\u003cany\u003e {\n                let response = await fetch('https://www.balldontlie.io/api/v1/players')\n                let { data }: { data: PlayerModel[] } = await response.json()\n                players.SET_PLAYERS(data)\n            },\n        }\n    },\n})\n```\n\nCheck it out, [right now!](https://rematchjs.org/)\n\n## Redux vs Rematch\n\n|                           | Redux  | Rematch      |\n| :------------------------ | :----: | :----------: |\n| simple setup ‎            |        | ‎✔           |\n| less boilerplate          |        | ‎✔           |\n| readability               |        | ‎✔           |\n| configurable              | ‎   ✔  | ‎✔           |\n| redux devtools            |   ‎✔   |       ‎✔     |\n| generated action creators | ‎      |       ‎✔     |\n| async                     | thunks | ‎async/await |\n\n## Migrate From Redux\n\nMigrating from Redux to Rematch may only involve minor changes to your state management, and no necessary changes to your view logic. See the [migration reference](https://rematchjs.org/docs/migrating-from-redux-to-rematch) for the details.\n\n## Composable Plugins\n\nRematch and its internals are all built upon a plugin pipeline. As a result, developers can make complex custom plugins that modify the setup or add data models, often without requiring any changes to Rematch itself. See the [plugins](https://rematchjs.org/docs/plugins) developed by the Rematch team or the [API for creating plugins](https://rematchjs.org/docs/api-reference/plugins).\n\n\n## Contact \u0026 Support\n\n- Create a [GitHub issue](https://github.com/rematch/rematch/issues) for bug reports, feature requests, or questions\n- Add a ⭐️ [star on GitHub](https://github.com/rematch/rematch) to support the project!\n\n### Contributors\n\nThank you to all the people who have already contributed to rematch!\n\u003ca href=\"https://github.com/rematch/rematch/graphs/contributors\"\u003e\n  \u003cimg src=\"https://contributors-img.web.app/image?repo=rematch/rematch\" /\u003e\n\u003c/a\u003e\n\nMade with [contributors-img](https://contributors-img.web.app).\n\n## Licence\n\nThis project is licensed under the [MIT license](https://github.com/rematch/rematch/blob/main/LICENSE).\n","funding_links":["https://github.com/sponsors/semoal"],"categories":["TypeScript","react","JavaScript","数据流","angular","Marks","Frameworks","List","目录"],"sub_categories":["macros","[React - A JavaScript library for building user interfaces](http://facebook.github.io/react)","State of the React","\u003ca id=\"state\"\u003e状态管理\u003c/a\u003e"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frematch%2Frematch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frematch%2Frematch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frematch%2Frematch/lists"}