Skip to content

Instantly share code, notes, and snippets.

View tanner-west's full-sized avatar

Tanner West tanner-west

View GitHub Profile
import { createSlice } from "@reduxjs/toolkit";
export interface UserSettingsState {
darkMode: boolean;
}
const initialState: UserSettingsState = { darkMode: false };
export const userSettingsSlice = createSlice({
name: "userSettings",
import {
Button,
RefreshControl,
SafeAreaView,
ScrollView,
Text,
View,
} from "react-native";
import { Provider, useDispatch, useSelector } from "react-redux";
import { configureStore } from "@reduxjs/toolkit";
import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react";
interface Post {
id: number;
userId: number;
title: string;
body: string;
}
export const postsApi = createApi({
import React from 'react';
import {RefreshControl, SafeAreaView, ScrollView, Text} from 'react-native';
import {createStore, applyMiddleware} from 'redux';
import {Provider, useDispatch, useSelector} from 'react-redux';
import thunk from 'redux-thunk';
import {getPosts} from './thunks';
import postsReducer from "./postsReducer";
import { toggleDarkMode } from "./actions";
const store = createStore(postsReducer, applyMiddleware(thunk));
// thunks.ts
export const getPosts = () => {
return dispatch => {
dispatch(getPostsRequested());
return fetch('https://jsonplaceholder.typicode.com/posts')
.then(response => {
if (!response.ok) {
throw new Error('Response not ok');
}
// reducer.ts
export interface IPostsState {
readonly loading: boolean;
readonly posts: Array<actions.IPost>;
readonly error: Error | null;
readonly darkMode: boolean;
}
// Initial reducer state
// actions.ts
import { Action } from "redux";
export type IPostActions = IGetPosts | IGetPostsFailure | IGetPostsSuccess;
export enum GET_POSTS {
REQUESTED = "GET_POSTS_REQUESTED",
SUCCESS = "GET_POSTS_SUCCESS",
FAILURE = "GET_POSTS_FAILURE",
}
import React from 'react';
import {SafeAreaView, ScrollView, Text, RefreshControl} from 'react-native';
import {
selector,
RecoilRoot,
useRecoilValueLoadable,
useRecoilRefresher_UNSTABLE,
} from 'recoil';
const postsState = selector({
import React from 'react';
import {createStore, applyMiddleware} from 'redux';
import {Provider, useDispatch, useSelector} from 'react-redux';
import thunk from 'redux-thunk';
import {RefreshControl, SafeAreaView, ScrollView, Text} from 'react-native';
// Fetch post thunk
const fetchPosts = () => {
return dispatch => {
dispatch(fetchPostRequested());
import { useSelector } from 'react-redux';
import { View, Text } from 'react-native';
function PostsList() {
const posts = useSelector(state => state.posts);
return (
<View>
{posts.map(post => (
<Text key={post.id}>{post.title}</Text>