This package contains React hooks and DevTools component used to visualize tree.
npm i @btree/core @bree/react
Initialize tree instance and setup connection with React state.
options.tree
: an instance of root nodeoptions.initialState
: Initial state passed to tree
import {nodes} from '@btree/core'
import {useTree} from '@btree/react'
const tree = nodes.root('AppTree', () =>
nodes.sequence([
nodes.condition('Is logout action', (state, props) => props?.action === 'logout'),
nodes.action('Do logout', (state) => {
state.username = null
})
])
)
const initialState = {
username: 'john'
}
const App = () => {
const {state, tick} = useTree({tree, initialState})
return (
<div>
{state.username ? (
<div>
<div>Hello {state.username}</div>
<button onClick={() => tick({action: 'logout'})}>Logout</button>
</div>
) : (
<div>Hello guest</div>
)}
</div>
)
}
Component used to visualize BehaviorTree.
import {DevTools} from '@btree/react'
const App = () => (
<DevTools>
<YourPage />
</DevTools>
)
Or if you want to use useTree
in App component:
import {DevTools} from '@btree/react'
const App = () => {
const tree = useTree({tree: AppBehavior})
return (
<DevTools trees={[tree]}>
<YourPage />
</DevTools>
)
}
Function used to create React Context for given tree.
import {nodes} from '@btree/core'
import {createTreeContext, useTree} from '@btree/react'
const AppBehavior = nodes.root('AppBehavior', () =>
nodes.selector([
// ...
])
)
const {useTreeContext, TreeContext} = createTreeContext(AppBehavior)
const MyComponent = () => {
const tree = useTreeContext()
// You can access tree.state in nested component
}
const App = () => {
const tree = useTree({tree: AppBehavior})
return (
<TreeContext.Provider value={tree}>
<MyComponent />
</TreeContext.Provide>
)
}