Files
Paradise/tgui/docs/state-usage.md
Burzah 18573ef254 Tgui v6 (#29342)
* [TGUI v6 Project] Remove `context` (#29086)

* [TGUI v6 Project] Remove `context`

* I forgot I had to do that.

* [TGUI v6 Project] Move to React (#29090)

* It compiles

* Last Inferno uses

* all works now

* Fixes

* [TGUI v6] Changes files extensions for interfaces from .js to .jsx, Deprecates Inferno State Hooks (#29094)

* Initial Commit

* Apply suggestions from code review

trust me bro

Co-authored-by: Aylong <69762909+AyIong@users.noreply.github.com>
Signed-off-by: Burzah <116982774+Burzah@users.noreply.github.com>

---------

Signed-off-by: Burzah <116982774+Burzah@users.noreply.github.com>
Co-authored-by: Aylong <69762909+AyIong@users.noreply.github.com>

* [TGUI v6] Replaces babel with swc, fixes realtive paths on a few files, new build (#29100)

* Initial commit

* Build

* webpack config and errors and rebuild

* export routingError, hopefully

* fix pda app routing

* pass current tab index to tab headers and content in nanobank

---------

Co-authored-by: warriorstar-orion <orion@snowfrost.garden>

* fix dna modifier bluescreen and library computer tabs (#29108)

* TGUI parity with TG

Need to fix a bunch of things...

* Implement TGUI payload chunking backend

https://github.com/tgstation/tgstation/pull/90295

* Filx chan bottom scroll. Again

* Fix TGchat focus

* Fix rounding

* Fix inputs

* Upgrade deps

* More fixes

* Fix chat lineHeight

* Fix NanoMap

* Update `tgui-core`

* fix autolathe

* fix airlock electronics

* fix intercom

* fix compost bin height

* Fix chat preferences

* Move to TSX without types :clueless:

* test tiny meet your new brother test tgui

* Fix RCD

* fix stackcraft

* fix up beakercontents

* Fix MODsuits

* fix seed extractor

* Merge branch 'tgui-v6' of github.com:ParadiseSS13/Paradise into tgui-v6

* fix holodeck

* fix cookbook pda app

* fix remaining useState args

* Fix DNAModifier

* Fix Sleeper

* Fix SupermatterMonitor

* Remove `vitest`

* Update dev-server

* Fix `IconStack`

* Correct margin

* bundles, please don't break

* prettier

* Revert "Remove `vitest`"

This reverts commit 0609006abb.

* Re-add tests

* Prettier

* fix maplint for test_tgui

* TGchat shine effect

* TGUI Rebuildo

* Fix broken tabs, search boxes, sortable tables, and others (#29450)

* Replace KitchenSink theme state with a React context

* Remove last usage of useLocalState

* Rebind unbound useState calls

* Build and update /tg/ui

* Reformat /tg/ui

* [ci skip]

---------

Co-authored-by: Arthri <41360489+a@users.noreply.github.com>
Co-authored-by: /tg/ui Builder <41898282+github-actions[bot]@users.noreply.github.com>

* Ports #29217 to tgui v6. Added tgui-setup to CI builds (#29787)

* Add tgui-setup to build scripts

* Fix CORS issue

* Build and update /tg/ui

Co-authored-by: /tg/ui Builder <41898282+github-actions[bot]@users.noreply.github.com>

* Add one missing word to comment

---------

Co-authored-by: Arthri <41360489+a@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* fix law manager

* Removes dangling references to `context` (#29793)

* Removes dangling references to `context`

* Build and update /tg/ui (#25)

Co-authored-by: /tg/ui Builder <41898282+github-actions[bot]@users.noreply.github.com>

---------

Co-authored-by: Arthri <41360489+a@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* fix messenger and atmos scanner

* swap out line break in examinate

* fix powermonitor

* Bump tgui-core from 3.1.5/3.1.4 to 4.3.4 (#29799)

* Bump tgui-core

* Build and update /tg/ui (#28)

Co-authored-by: /tg/ui Builder <41898282+github-actions[bot]@users.noreply.github.com>

---------

Co-authored-by: Arthri <41360489+a@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Fixes additional examine text

* oopsie

* Small tgui v6 fixes (#29801)

* Remove flow

* Miscellaneous fixes

* Miscellaneous fixes

* Moved properties placed on the wrong element

* Migrate removed CSS attributes in JSX

* Build and update /tg/ui (#27)

Co-authored-by: /tg/ui Builder <41898282+github-actions[bot]@users.noreply.github.com>

---------

Co-authored-by: Arthri <41360489+a@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* fix carbon examine

* fix robot examine

* fix lint

* improve SMES appearance

* fix camera console name order

* more newline fixes

* fix boolean modal cancel not working

* fix random disabled access in RCD

* point tgui to correct passthrough verb names

* Fix missing 0 option for ERTs. (#29819)

* fix newlines in damage flavor

* Revert all changes related to newlines in DM

* fix the actual thing that was wrong with newlines

* fix ERT manager deny input

* [tgui-v6] Makes Agent Card UI more aesthethic, fixes input fields, fixes minimum age slider (#29832)

* agent card fixes and tweaks

* tgui bundle

* Reformat /tg/ui (#33) (#29838)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* restore camera console list appearance

* fixed pai ui paths (#29867)

* /tg/ui fixes no. 3 (#29868)

* Remove IconStack styles that conflict with styles added in tgstation/tgui-core#203

* Fix minesweeper icon

* DNA Modifier fixes

* Fix alignment of icons in PDA games menu

* Expand chem dispenser

* Fix pAI interfaces

* Build and update /tg/ui

---------

Co-authored-by: Arthri <41360489+a@users.noreply.github.com>
Co-authored-by: /tg/ui Builder <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Toastical <20125180+Toastical@users.noreply.github.com>

* teleporter fix, bundle changes, test

* /tg/ui fixes no.4 (#29877)

* Fix translucent buttons

* Remove stories already present in tgui-core

* Make voting choices not transparent

* Build and update /tg/ui

* Fix size of set ringtone in PDA messenger

* Fix crew monitor highlight colors

* Fix ReagentsEditor search. Small style fixes

* tgui-say radio prefix has special color again

* Expand chameleon mask a little

* Fix search in chameleon mask

* Make list input modal slightly taller

* [ci skip]

* Build /tg/ui

---------

Co-authored-by: Arthri <41360489+a@users.noreply.github.com>
Co-authored-by: /tg/ui Builder <41898282+github-actions[bot]@users.noreply.github.com>

---------

Signed-off-by: Burzah <116982774+Burzah@users.noreply.github.com>
Co-authored-by: Aylong <69762909+AyIong@users.noreply.github.com>
Co-authored-by: warriorstar-orion <orion@snowfrost.garden>
Co-authored-by: Aylong <alexanderkitsa@gmail.com>
Co-authored-by: Arthri <41360489+Arthri@users.noreply.github.com>
Co-authored-by: Arthri <41360489+a@users.noreply.github.com>
Co-authored-by: /tg/ui Builder <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Charlie Nolan <funnyman3595@gmail.com>
Co-authored-by: Toastical <20125180+Toastical@users.noreply.github.com>
2025-07-27 23:23:20 +00:00

31 lines
1.6 KiB
Markdown

# Managing component state
React has excellent documentation on useState and useEffect. These hooks should be the ways to manage state in TGUI (v5).
[React Hooks](https://react.dev/learn/state-a-components-memory)
You might find usages of useLocalState. This should be considered deprecated and will be removed in the future. In older versions of TGUI, InfernoJS did not have hooks, so these were used to manage state. useSharedState is still used in some places where uis are considered "IC" and user input is shared with all persons at the console/machine/thing.
## A Note on State
Many beginners tend to overuse state (or hooks all together). State is effective when you want to implement user interactivity, or are handling asynchronous data, but if you are simply using state to store a value that is not changing, you should consider using a variable instead.
In previous versions of React, each setState would trigger a re-render, which would cause poorly written components to cascade re-render on each page load. Messy! Though this is no longer the case with batch rendering, it's still worthwhile to point out that you might be overusing it.
## Derived state
One great way to cut back on state usage is by using props or other state as the basis for a variable. You'll see many examples of this in the TGUI codebase. What does this mean? Here's an example:
```tsx
// Bad
const [count, setCount] = useState(0);
const [isEven, setIsEven] = useState(false);
useEffect(() => {
setIsEven(count % 2 === 0);
}, [count]);
// Good!
const [count, setCount] = useState(0);
const isEven = count % 2 === 0; // Derived state
```