Coder Social home page Coder Social logo

Comments (3)

guilleccc avatar guilleccc commented on September 27, 2024

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.

gsdev01 avatar gsdev01 commented on September 27, 2024

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 nullfor 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.

gsdev01 avatar gsdev01 commented on September 27, 2024

Can't re-open this by myself btw @guilleccc

from norigin-spatial-navigation.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.