Class: Widget
Defined in: packages/core/src/passages/widget.ts:68
Custom React component passage for fully customized UI.
Widget passages allow you to use any React component as a game passage, providing complete control over the UI when the built-in passage types (Story, InteractiveMap) don't meet your needs.
Important: When passing a function, it is always treated as a React
component and rendered via createElement. This ensures hooks work correctly
even in minified production builds.
Example
import { newWidget } from '@react-text-game/core';
// With ReactNode (static content)
const inventoryUI = newWidget('inventory', (
<div className="inventory">
<h2>Your Inventory</h2>
<InventoryGrid items={player.inventory} />
<button onClick={() => Game.jumpTo('game')}>Close</button>
</div>
));
// With React component (supports hooks)
const MyMenu = () => {
const [selected, setSelected] = useState(null);
return <MenuUI selected={selected} onSelect={setSelected} />;
};
const menuWidget = newWidget('menu', MyMenu);
// Navigate to custom UI
Game.jumpTo(inventoryUI);
See
newWidget - Factory function for creating Widget instances
Extends
Constructors
Constructor
new Widget(
id,content):Widget
Defined in: packages/core/src/passages/widget.ts:80
Creates a new Widget passage.
Parameters
id
string
Unique identifier for this widget
content
React node or function returning React node to display
Returns
Widget
Overrides
Properties
_lastDisplayResult
protected_lastDisplayResult:unknown=null
Defined in: packages/core/src/passages/passage.ts:47
Internal
Cached result from the last display() call. Used to access display data without re-executing content functions.
Inherited from
id
readonlyid:string
Defined in: packages/core/src/passages/passage.ts:34
Unique identifier for this passage. Used for navigation and registry lookup.
Inherited from
type
readonlytype:PassageType
Defined in: packages/core/src/passages/passage.ts:40
The type of this passage. Determines how the passage should be rendered in the UI.
Inherited from
Methods
display()
display():
ReactNode
Defined in: packages/core/src/passages/widget.ts:96
Returns the React node for rendering. If content is a function, it is treated as a React component and rendered via createElement to properly support hooks.
Note: Functions are always rendered via createElement, never called
directly. This ensures hooks work correctly in minified builds where
function names are mangled to lowercase identifiers.
Returns
ReactNode
The React content to be rendered
Overrides
getLastDisplayResult()
getLastDisplayResult<
T>():T|null
Defined in: packages/core/src/passages/passage.ts:97
Returns the cached result from the last display() call. Use this method to access passage data without re-executing content functions, which prevents unwanted side effects.
Type Parameters
T
T = unknown
Expected return type
Returns
T | null
The cached display result, or null if display() has never been called
Example
const story = newStory('test', () => [{ type: 'text', content: 'Hello' }]);
// First call to display() - executes content function
const result = story.display();
// Get cached result - does NOT execute content function again
const cached = story.getLastDisplayResult();
Inherited from
hasDisplayCache()
hasDisplayCache():
boolean
Defined in: packages/core/src/passages/passage.ts:106
Checks if a cached display result exists.
Returns
boolean
true if display() has been called at least once, false otherwise