-
Notifications
You must be signed in to change notification settings - Fork 0
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
fix: yjs collaboration plugin in react strict mode #7
base: main
Are you sure you want to change the base?
fix: yjs collaboration plugin in react strict mode #7
Conversation
Clone of the PR facebook/lexical#6271 |
My review is in progress 📖 - I will have feedback for you in a few minutes! |
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the You can disable this status message by setting the Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (invoked as PR comments)
Additionally, you can add CodeRabbit Configuration File (
|
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.
I have reviewed your code and did not find any issues!
Please note that I can make mistakes, and you should still encourage your team to review your code as well.
/review |
@coderabbitai review |
Actions performedReview triggered.
|
PR Reviewer Guide 🔍(Review updated until commit 3a39ea2)
|
Persistent review updated to latest commit 3a39ea2 |
/review |
Persistent review updated to latest commit 3a39ea2 |
Persistent review updated to latest commit 3a39ea2 |
@coderabbitai full review |
Actions performedFull review triggered. |
Persistent review updated to latest commit 3a39ea2 |
PR Code Suggestions ✨
|
No comment from coderabbit |
User description
Description
The collaboration plugin doesn't work well in nextjs 14.2 with strict mode enabled. See videos below to see how it breaks. I fixed the issues by relying on a useEffect instead of a useMemo to initialize yjs binding and provider.
Relevant thread
https://discord.com/channels/953974421008293909/1233102329931366531/1233102329931366531
Test plan
LIVEBLOCKS_SECRET_KEY
to the root.env.local
file. Alternatively, I can send you a secret key as well.npm run dev
and test the editor on multiple tabs/windows/browsers.LexicalCollaborationPlugin
file into node_modules.next
folder because nextjs caches built modules.rm -r .next && npm run dev
Before
https://www.loom.com/share/460727ea35b04e26a311d55d5283be3
After
https://www.loom.com/share/d3a2701d4ef6456a9bd7c9a202d38ebe
Note
I tried to runNever mind, it was just an error with my changes.npm run build-release
, but it didn't work due to facebook/lexical#5420 so I had to compile "manually".Description by Korbit AI
Note
This feature is in early access. You can enable or disable it in the Korbit Console.
What change is being made?
Fix the Yjs collaboration plugin to work correctly in React strict mode.
Why are these changes being made?
The Yjs collaboration plugin was not functioning properly in React strict mode due to lifecycle method issues. This fix ensures compatibility with React strict mode by addressing these lifecycle concerns, improving the stability and reliability of the plugin in modern React applications.
PR Type
Bug fix, Enhancement
Description
CollaborationPlugin
component to handle Yjs collaboration in React applications.useMemo
withuseEffect
for initializing Yjs binding and provider to ensure proper setup in React strict mode.useMemo
for the provider factory function to optimize performance.Changes walkthrough 📝
LexicalCollaborationPlugin.tsx
Implement `CollaborationPlugin` with Yjs integration and React hooks
packages/lexical-react/src/LexicalCollaborationPlugin.tsx
CollaborationPlugin
component.useEffect
for initializing Yjs binding and provider.useMemo
for provider factory function.