-
Notifications
You must be signed in to change notification settings - Fork 29
Refactor action bar components to React functional components #8754
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 2 commits
Commits
Show all changes
18 commits
Select commit
Hold shift + click to select a range
4a50f8f
Refactor action bar components to functional components using hooks
hotzenklotz 929fc74
Merge branch 'master' into refactor_tracing_ui
hotzenklotz b75db00
apply CodeRabbit feedback
hotzenklotz 089b569
Merge branch 'master' of github.com:scalableminds/webknossos into ref…
hotzenklotz 9217e23
pr feedback
hotzenklotz 457b6cf
split tracing_actions_view into subcomponents
hotzenklotz 5977990
split dataset position into sub components
hotzenklotz 0f0651b
split save, unde/redo actions into sub components
hotzenklotz e8e846a
renamed files for camelcase to snake case
hotzenklotz 753df33
typing
hotzenklotz 73dfccb
apply CodeRabbit feedback
hotzenklotz 606f846
Merge branch 'master' of github.com:scalableminds/webknossos into ref…
hotzenklotz df64f82
apply CodeRabbit feedback
hotzenklotz e2f7225
use modal hook for consistent styling
hotzenklotz eb3710a
remove volume/fallback from "Copy to my account" for sandboxed annota…
hotzenklotz c927767
prevent unnecessary re-renders for SaveButton
hotzenklotz 52bcc55
Merge branch 'master' of github.com:scalableminds/webknossos into ref…
hotzenklotz f5f0ec6
apply PR feedback
hotzenklotz File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this is a general pattern about which I'm a bit hesitant. in class components, (helper) methods don't really have a cost because they are set up once for the lifecycle of the component. however, in functional components, these local functions are defined in every "call" (I don't use "render" here because even when no re-render happens, the function is called to get its jsx) of that component. these redefinition have (at least) two downsides:
useCallback
is a pattern which can mitigate this a bit (the second point is solved fully by it). The downside is that it's annoying to list all dependencies. However, that's the way it is I guess (at least until the react compiler hits the road).One other solution is possible for functions that merely act as handlers (e.g., onclick handlers). The result of such handlers doesn't influence the actual rendering. This is why it is fine to lift them to the module-level and make them simply call
Store.getState()
. Then, one doesn't need to useuseCallback
with its dependencies.In the code highlighted above copyRotationToClipboard, handleChangePosition and handleChangeRotation are functions that can be lifted to the top level (the flycam can be retrieved from Store.getState()). However,
isPositionOutOfBounds
directly influences the rendering output which is why it must not be lifted (instead, useCallback would make sense).For other components, this might not make much of a difference (perf-wise), but the action bar has a high impact on the FPS performance because it's updated very frequently. Therefore, I'd like to get this right.