JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 254
  • Score
    100M100P100Q90355F
  • License MIT

React bindings for Reflex

Package Exports

    This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@rbxts/react-reflex) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

    Readme

    Logo

    React Reflex

    An all-in-one state container.
    npm package →

    GitHub Workflow Status NPM Version GitHub License

    Reflex is a simple state container inspired by Rodux and Silo, designed to be an all-in-one solution for managing and reacting to state in Roblox games.

    React Reflex provides React hooks and components for Reflex using either @rbxts/react or jsdotlua/react.

    See the React Reflex documentation for more information.

    📦 Setup

    TypeScript

    Install the @rbxts/react-reflex package using your package manager of choice.

    npm install @rbxts/react-reflex
    yarn add @rbxts/react-reflex
    pnpm add @rbxts/react-reflex

    Wally

    Add littensy/react-reflex to your wally.toml file.

    [dependencies]
    ReactReflex = "littensy/react-reflex@VERSION"

    🚀 Examples

    Mounting your app

    Use <ReflexProvider> to enable Reflex hooks and components:

    import React, { StrictMode } from "@rbxts/react";
    import { createPortal, createRoot } from "@rbxts/react-roblox";
    import { ReflexProvider } from "@rbxts/react-reflex";
    
    const root = createRoot(new Instance("Folder"));
    
    root.render(
        <StrictMode>
            <ReflexProvider producer={producer}>
                {/* Your app */}
                {createPortal(<App />, playerGui)}
            </ReflexProvider>
        </StrictMode>,
    );

    Typed hooks

    Custom hooks can be created to provide typed hooks for your state:

    import { useProducer, useSelector, UseProducerHook, UseSelectorHook } from "@rbxts/react-reflex";
    
    export const useRootProducer: UseProducerHook<RootProducer> = useProducer;
    export const useRootSelector: UseSelectorHook<RootProducer> = useSelector;

    Counter

    import React from "@rbxts/react";
    import { useRootProducer, useRootSelector } from "./hooks";
    
    export function Counter() {
        const producer = useRootProducer();
        const count = useRootSelector((state) => state.count);
    
        return (
            <textbutton
                Text={`Count: ${count}`}
                AnchorPoint={new Vector2(0.5, 0.5)}
                Size={new UDim2(0, 100, 0, 50)}
                Position={new UDim2(0.5, 0, 0.5, 0)}
                Event={{
                    Activated: () => producer.increment(),
                    MouseButton2Click: () => producer.decrement(),
                }}
            />
        );
    }

    📚 Resources

    📝 License

    This project is licensed under the MIT license.