Skip to content

Commit 0270f49

Browse files
authored
Fix for <Form> component when using React SSR (#2612)
* Update useForm.ts * refactor
1 parent 49ad790 commit 0270f49

File tree

2 files changed

+10
-2
lines changed

2 files changed

+10
-2
lines changed

packages/react/src/react.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { DependencyList, EffectCallback, useEffect, useLayoutEffect } from 'react'
2+
3+
// Inspired by react-redux, this hook uses useLayoutEffect in the browser, and useEffect
4+
// when using SSR. Currently, useLayoutEffect doesn't work when rendered on the server.
5+
export function useIsomorphicLayoutEffect(effect: EffectCallback, deps?: DependencyList): void {
6+
typeof window === 'undefined' ? useEffect(effect, deps) : useLayoutEffect(effect, deps)
7+
}

packages/react/src/useForm.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ import {
1111
VisitOptions,
1212
} from '@inertiajs/core'
1313
import { cloneDeep, get, has, isEqual, set } from 'lodash-es'
14-
import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'
14+
import { useCallback, useEffect, useMemo, useRef, useState } from 'react'
15+
import { useIsomorphicLayoutEffect } from './react'
1516
import useRemember from './useRemember'
1617

1718
export type SetDataByObject<TForm> = (data: Partial<TForm>) => void
@@ -249,7 +250,7 @@ export default function useForm<TForm extends FormDataType<TForm>>(
249250
[setDefaults],
250251
)
251252

252-
useLayoutEffect(() => {
253+
useIsomorphicLayoutEffect(() => {
253254
if (!dataAsDefaults) {
254255
return
255256
}

0 commit comments

Comments
 (0)