first commit
Some checks failed
Test examples / Test Examples (20) (push) Has been cancelled
Test examples / Test Examples (22) (push) Has been cancelled
Lock Threads / action (push) Has been cancelled
Trigger Release / start (push) Has been cancelled
Stale issue handler / stale (push) Has been cancelled
Update Font Data / create-pull-request (push) Has been cancelled
build-and-deploy / deploy-target (push) Has been cancelled
build-and-deploy / build (push) Has been cancelled
build-and-deploy / stable - aarch64-unknown-linux-musl - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-unknown-linux-musl - node@16 (push) Has been cancelled
build-and-deploy / stable - aarch64-unknown-linux-gnu - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-unknown-linux-gnu - node@16 (push) Has been cancelled
build-and-deploy / stable - aarch64-pc-windows-msvc - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-pc-windows-msvc - node@16 (push) Has been cancelled
build-and-deploy / stable - aarch64-apple-darwin - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-apple-darwin - node@16 (push) Has been cancelled
build-and-deploy / build-wasm (nodejs) (push) Has been cancelled
build-and-deploy / build-wasm (web) (push) Has been cancelled
build-and-deploy / Deploy preview tarball (push) Has been cancelled
build-and-deploy / Potentially publish release (push) Has been cancelled
build-and-deploy / publish-turbopack-npm-packages (push) Has been cancelled
build-and-deploy / Deploy examples (push) Has been cancelled
build-and-deploy / thank you, build (push) Has been cancelled
build-and-deploy / Upload Turbopack Bytesize metrics to Datadog (push) Has been cancelled
Rspack Next.js development integration tests / Rspack integration tests (push) Has been cancelled
Rspack Next.js production integration tests / Rspack integration tests (push) Has been cancelled
Turbopack Next.js development integration tests / Next.js integration tests (push) Has been cancelled
Turbopack Next.js production integration tests / Next.js integration tests (push) Has been cancelled
Update Rspack test manifest / Update and upload Rspack development test manifest (push) Has been cancelled
Update Rspack test manifest / Update and upload Rspack production test manifest (push) Has been cancelled
Upload bundler test manifests to areweturboyet.com / Upload test results (push) Has been cancelled
Update React / create-pull-request (push) Has been cancelled
test-e2e-project-reset-cron / reset-test-project (push) Has been cancelled
Notify about the top 15 issues/PRs/feature requests (most reacted) in the last 90 days / run (push) Has been cancelled

This commit is contained in:
Arian Tron
2026-03-10 19:37:31 +03:30
commit 61f56f997c
27684 changed files with 2784175 additions and 0 deletions

View File

@@ -0,0 +1,26 @@
import React from "react";
import { useSelector } from "react-redux";
import { useRematchDispatch } from "../utils";
const CounterDisplay = () => {
const counter = useSelector((state) => state.counter);
const { increment } = useRematchDispatch((dispatch) => ({
increment: dispatch.counter.increment,
}));
return (
<>
<h3> Counter </h3>
<p>
This counter is connected via the <b>useSelector</b> hook. Components
which are not pages can be connected using the useSelector hook just
like redux components.
</p>
<p>Current value {counter}</p>
<p>
<button onClick={() => increment(3)}>Increment by 3</button>
</p>
</>
);
};
export default CounterDisplay;

View File

@@ -0,0 +1,20 @@
import React from "react";
const Header = () => {
return (
<div>
<nav>
<ul>
<li>
<a href="/">Home</a>
</li>
<li>
<a href="/github-users">Async Example </a>
</li>
</ul>
</nav>
</div>
);
};
export default Header;

View File

@@ -0,0 +1,22 @@
import { createModel } from "@rematch/core";
const counter = createModel({
state: 0, // initial state
reducers: {
// handle state changes with pure functions
increment: (state, payload) => {
if (typeof payload === "object") return state + 1;
return state + payload;
},
},
effects: {
// handle state changes with impure functions.
// use async/await for async actions
async incrementAsync(payload, rootState) {
await new Promise((resolve) => setTimeout(resolve, 1000));
this.increment(payload);
},
},
});
export default counter;

View File

@@ -0,0 +1,38 @@
const github = {
state: {
users: [],
isLoading: false,
}, // initial state
reducers: {
requestUsers(state) {
return {
users: [],
isLoading: true,
};
},
receiveUsers(state, payload) {
return {
isLoading: false,
users: payload,
};
},
},
effects: {
// handle state changes with impure functions.
// use async/await for async actions
async fetchUsers() {
try {
this.requestUsers();
const response = await fetch("https://api.github.com/users");
const users = await response.json();
this.receiveUsers(users);
return users;
} catch (err) {
console.log(err);
this.receiveUsers([]);
}
},
},
};
export default github;

View File

@@ -0,0 +1,5 @@
import counter from "./counter";
import github from "./github";
export { counter };
export { github };

View File

@@ -0,0 +1,47 @@
import { useMemo } from "react";
import { init } from "@rematch/core";
import { counter, github } from "./models";
let store;
const exampleInitialState = {
counter: 5,
};
export const initStore = (initialState = exampleInitialState) =>
init({
models: {
counter,
github,
},
redux: {
initialState,
},
});
export const initializeStore = (preloadedState) => {
let _store = store ?? initStore(preloadedState);
// After navigating to a page with an initial Redux state, merge that state
// with the current state in the store, and create a new store
if (preloadedState && store) {
_store = initStore({
...store.getState(),
...preloadedState,
});
// Reset the current store
store = undefined;
}
// For SSG and SSR always create a new store
if (typeof window === "undefined") return _store;
// Create the store once in the client
if (!store) store = _store;
return _store;
};
export function useStore(initialState) {
const store = useMemo(() => initializeStore(initialState), [initialState]);
return store;
}

View File

@@ -0,0 +1,10 @@
// Robust way to check if it's Node or browser
import { useDispatch } from "react-redux";
export const checkServer = () => {
return typeof window === "undefined";
};
export const useRematchDispatch = (selector) => {
const dispatch = useDispatch();
return selector(dispatch);
};