diff --git a/packages/plugin-rsc/e2e/basic.test.ts b/packages/plugin-rsc/e2e/basic.test.ts index bf96dcb6c..8b1242fa1 100644 --- a/packages/plugin-rsc/e2e/basic.test.ts +++ b/packages/plugin-rsc/e2e/basic.test.ts @@ -1404,6 +1404,33 @@ function defineTest(f: Fixture) { .click() } + test('action bind member @js', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await using _ = await expectNoReload(page) + await testActionBindMember(page) + }) + + testNoJs('action bind member @nojs', async ({ page }) => { + await page.goto(f.url()) + await testActionBindMember(page) + }) + + async function testActionBindMember(page: Page) { + await expect(page.getByTestId('test-server-action-bind-member')).toHaveText( + '[?]', + ) + await page + .getByRole('button', { name: 'test-server-action-bind-member' }) + .click() + await expect(page.getByTestId('test-server-action-bind-member')).toHaveText( + 'true', + ) + await page + .getByRole('button', { name: 'test-server-action-bind-reset' }) + .click() + } + test('action bind client @js', async ({ page }) => { await page.goto(f.url()) await waitForHydration(page) diff --git a/packages/plugin-rsc/examples/basic/src/routes/action-bind/server.tsx b/packages/plugin-rsc/examples/basic/src/routes/action-bind/server.tsx index 2de0f294a..0d9782e37 100644 --- a/packages/plugin-rsc/examples/basic/src/routes/action-bind/server.tsx +++ b/packages/plugin-rsc/examples/basic/src/routes/action-bind/server.tsx @@ -10,6 +10,7 @@ export function TestServerActionBindReset() { action={async () => { 'use server' testServerActionBindSimpleState = '[?]' + testServerActionBindMemberState = '[?]' testServerActionBindActionState = '[?]' testServerActionBindClientState++ }} @@ -94,3 +95,28 @@ export function TestServerActionBindAction() { ) } + +let testServerActionBindMemberState = '[?]' + +export function TestServerActionBindMember() { + const x = { + y: { + z: 1234, + }, + invalid: () => {}, + } + + return ( +
{ + 'use server' + testServerActionBindMemberState = JSON.stringify(x.y.z === 1234) + }} + > + + + {testServerActionBindMemberState} + +
+ ) +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/root.tsx b/packages/plugin-rsc/examples/basic/src/routes/root.tsx index 2e6ef5e71..680a6ad6b 100644 --- a/packages/plugin-rsc/examples/basic/src/routes/root.tsx +++ b/packages/plugin-rsc/examples/basic/src/routes/root.tsx @@ -6,6 +6,7 @@ import { TestServerActionBindClient, TestServerActionBindReset, TestServerActionBindSimple, + TestServerActionBindMember, } from './action-bind/server' import { TestServerActionError } from './action-error/server' import { @@ -105,6 +106,7 @@ export function Root(props: { url: URL }) { +