-
Notifications
You must be signed in to change notification settings - Fork 2.4k
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
React client components don't work in Nx shared library. ('use client') Nextjs 13 #13194
Comments
I'm having the same issue. |
Happens to me as well. |
There is one workaround to this bug.
**note if you are |
I am having the exact same issue. I think, having to create a client component file in the app directory is not a sustainable solution; especially if the application consists of many components. |
Yeah, I gave up on using the new app directory because I started getting the opposite issue with server components which was just causing too much of a headache. I think this actually might just be a Nextjs 13 issue. As you can see here shared components are still a work in progress. |
To make next 13 work there is a need to make the library tree shakeable and separate server and client logic, also need to write build executor to keep "use client" (now its being dropped during build) |
I thought all React component libs in Nx were tree shakable. Unless I've missed something huge anyway. It seems it is more about not stripping out |
We have the very same problem, if someone is looking for "workaround" we have decided to have a file in "use client";
import AddToCartButton from "@store/AddToCartButton";
import Cart from "@store/Cart";
import Input from "@store/Input";
export { AddToCartButton, Cart, Input }; |
Unfortunately this workaround didn't work for me with OS : darwin arm64
yarn : 1.22.19
nx : 15.3.0
@nrwl/angular : Not Found
@nrwl/cypress : 15.3.0
@nrwl/detox : 15.3.0
@nrwl/devkit : 15.3.0
@nrwl/esbuild : Not Found
@nrwl/eslint-plugin-nx : 15.3.0
@nrwl/expo : 15.3.0
@nrwl/express : Not Found
@nrwl/jest : 15.3.0
@nrwl/js : 15.3.0
@nrwl/linter : 15.3.0
@nrwl/nest : Not Found
@nrwl/next : 15.3.0
@nrwl/node : Not Found
@nrwl/nx-cloud : 15.0.2
@nrwl/nx-plugin : Not Found
@nrwl/react : 15.3.0
@nrwl/react-native : Not Found
@nrwl/rollup : 15.3.0
@nrwl/schematics : Not Found
@nrwl/storybook : Not Found
@nrwl/web : 15.3.0
@nrwl/webpack : 15.3.0
@nrwl/workspace : 15.3.0
typescript : 4.9.4
---------------------------------------
Local workspace plugins:
---------------------------------------
Community plugins:
@nrwl/vite: 15.3.0` |
This workaround worked for me. But I think this is a big issue. And it needs a fix. |
The workaround is working if you only use the client component in the |
I'm hoping for a way to tell Babel or Webpack to leave the |
@TheodorTomas how were you able to add The type Right now by default I'm getting this error.
|
I am not sure which version of Nx you are on but @TheodorTomas thanks for reporting the issue, can you create a small repo so I can accurately look into this? |
@ndcunningham I took a stab at a small repo to reproduce the issue. I am actually seeing different behavior than my main app - I can't get any client components to load, but in my main app Client Components work fine when they are in the app, or from shared libraries that are re-exported with "use client" in the app. Happy to help in any way with this - it is causing us a lot of pain since we have two apps in the same monorepo that need to share components. |
This should work with #15650 |
Hi... this is not working for me importing js libs ( error - ./pages/_app.tsx:5:0
Module not found: Can't resolve '@nextjs-test/mylib-wp'
3 | import './styles.css';
4 | // import { mylib } from '@nextjs-test/mylib';
> 5 | import {mylibWp} from '@nextjs-test/mylib-wp'
6 |
7 | function CustomApp({ Component, pageProps }: AppProps) {
8 | console.log('My lib:' + mylibWp()); I also added a nextjs lib using EDIT: Open the following issue since this one is already closed: #15785 |
This issue has been closed for more than 30 days. If this issue is still occuring, please open a new issue with more recent context. |
Current Behavior
When trying to use a client component exported in a shared React component library within a Nextjs 13 app using the new NextJS
app
directory, Nx strips'use client';
from the component resulting in the following error provided below.Expected Behavior
Nx should recognize the
'use client';
syntax so that the component doesn't mount on the server but is instead recognized as a client component.Steps to Reproduce
app
directory by addingexperimental: { appDir: true },
tonext.config.js
.const [test, setTest] = useState('test');
to the auto generated component in the React lib.'use client';
to the top of the component.yarn start
.'use client';
is required to use client components.Failure Logs
You're importing a component that imports client-only. It only works in a Client Component but none of its parents are marked with "use client", so they're Server Components by default.
Environment
NX Report complete - copy this into the issue template
Node : 18.11.0
OS : darwin x64
yarn : 1.22.19
nx : 15.0.13
@nrwl/angular : Not Found
@nrwl/cypress : 15.0.13
@nrwl/detox : Not Found
@nrwl/devkit : 15.0.13
@nrwl/esbuild : Not Found
@nrwl/eslint-plugin-nx : 15.0.13
@nrwl/expo : Not Found
@nrwl/express : Not Found
@nrwl/jest : 15.0.13
@nrwl/js : 15.0.13
@nrwl/linter : 15.0.13
@nrwl/nest : Not Found
@nrwl/next : 15.0.13
@nrwl/node : Not Found
@nrwl/nx-cloud : 15.0.2
@nrwl/nx-plugin : Not Found
@nrwl/react : 15.0.13
@nrwl/react-native : Not Found
@nrwl/rollup : 15.0.13
@nrwl/schematics : Not Found
@nrwl/storybook : 15.0.13
@nrwl/web : 15.0.13
@nrwl/webpack : 15.0.13
@nrwl/workspace : 15.0.13
typescript : 4.8.4
Local workspace plugins:
Community plugins:
The text was updated successfully, but these errors were encountered: