Comments (3)
Hi @gsdev01 ,
Based on what you describe here, I believe the second code example looks right:
{visible && (
<FocusContextWrapper />
)}
Then the component FocusContextWrapper
(and the internal hook useFocusable) will be rendered only if visible.
However, It would be nice to know a bit more context on the component containing the code above. What is actually the FocusContextWrapper
doing?
I believe the another alternative you have here is to use the FocusContext
but render its children conditionally:
const { focusKey, focusSelf, ref } = useFocusable();
return (
<FocusContext.Provider value={focusKey}>
{visible && children}
</FocusContext.Provider>
)
This issue will be closed, but please feel free to reopen if you need more information
from norigin-spatial-navigation.
Thanks for the help @guilleccc , I would like to add fews things to my previous post:
Based on what you describe here, I believe the second code example looks right:
{visible && ( <FocusContextWrapper /> )}
Then the component
FocusContextWrapper
(and the internal hook useFocusable) will be rendered only if visible.However, It would be nice to know a bit more context on the component containing the code above. What is actually the
FocusContextWrapper
doing?
FocusContextWrapper is just the focusable component in an other component like so :
// FocusContextWrapper.tsx
// ...
const { focusKey, focusSelf, ref } = useFocusable();
return (
<FocusContext.Provider value={focusKey}>
<div ref={ref}>content</div>
</FocusContext.Provider>
)
So the component and the hook will be called and destroyed everytime visible is true
.
I believe the another alternative you have here is to use the
FocusContext
but render its children conditionally:const { focusKey, focusSelf, ref } = useFocusable(); return ( <FocusContext.Provider value={focusKey}> {visible && children} </FocusContext.Provider> )
With this solution the hook is called even if children is not visible and the children should contain a ref like so:
// children
<div ref={ref}>content</div>
resulting with console warning :
Component added without a node reference. This will result in its coordinates being empty and may cause lost focus. Check the "ref" passed to "useFocusable"
and we have null
for node
field....
In addition, I'm using this conditional rendering for a Modal.
So when the visible
state become true
, Modal component should gained the focus but how to handle the focus dispatch when visible
become false
? Right now, the focus is lost... Do I have to set it manually ?
Thanks for the help
from norigin-spatial-navigation.
Can't re-open this by myself btw @guilleccc
from norigin-spatial-navigation.
Related Issues (20)
- RTL Flag isn't work HOT 1
- ScrollTo is not Working in Y - axis When Data is Wrapped inside the Row HOT 1
- Allow `ref` on items not yet displayed. (see below for more info)
- Allow for `onArrowPress` to have next focused node as property of KeyPressDetails HOT 1
- Unexplainable behaviour when focusable is removed
- Dynamic RTL switching
- A suggestion about keycode mapping HOT 2
- focus on closest element within the directional input? HOT 3
- Vertically stacked items focus issue HOT 1
- Example scroll position incorrect when useGetBoundingClientRect: true HOT 1
- useFocusable CB on selected/focused child? HOT 1
- Add throttle: 250 and shouldFocusDOMNode: true in init causing scroll behavior weird HOT 2
- `navigateByDirection` does not trigger `onArrowPress` handler HOT 2
- Remember focus on navigate back HOT 5
- Wrong decision on distance measurement SpatialNavigation.ts : getSecondaryAxisDistance() HOT 3
- Focusable Container should not be focused if they have no focusable children
- Support for Philips Titan OS HOT 4
- Add focusOptions in conjunction with shouldFocusDOMNode HOT 9
- Webos Magic report - onMouseEnter Event not triggering HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from norigin-spatial-navigation.