Skip to content

Commit a546dc9

Browse files
christophehurpeauerikras
authored andcommitted
fix: validator infinite loops (#46)
* fix: validator infinite loops fixes #44 * test: update useField test
1 parent a61e3fc commit a546dc9

File tree

2 files changed

+7
-4
lines changed

2 files changed

+7
-4
lines changed

src/useField.js

+6-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { useState, useEffect, useRef } from 'react'
21
import { fieldSubscriptionItems } from 'final-form'
2+
import { useEffect, useRef, useState } from 'react'
33

44
export const all = fieldSubscriptionItems.reduce((result, key) => {
55
result[key] = true
@@ -21,8 +21,11 @@ const eventValue = event => {
2121

2222
const useField = (name, form, validate, subscription = all) => {
2323
const autoFocus = useRef(false)
24+
const validatorRef = useRef(undefined)
2425
const [state, setState] = useState({})
2526

27+
validatorRef.current = validate
28+
2629
const deps = subscriptionToInputs(subscription)
2730
useEffect(
2831
() =>
@@ -38,12 +41,12 @@ const useField = (name, form, validate, subscription = all) => {
3841
subscription,
3942
validate
4043
? {
41-
getValidator: () => validate
44+
getValidator: () => validatorRef.current
4245
}
4346
: undefined
4447
),
4548
// eslint-disable-next-line react-hooks/exhaustive-deps
46-
[name, form, validate, ...deps]
49+
[name, form, ...deps]
4750
)
4851
let { blur, change, focus, value, ...meta } = state
4952
delete meta.name // it's in input

src/useField.test.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ describe('useField()', () => {
221221
onSubmit,
222222
validate
223223
})
224-
const firstName = useField(FIELD_NAME, form, required)
224+
const firstName = useField(FIELD_NAME, form, value => required(value))
225225

226226
return (
227227
<form onSubmit={handleSubmit}>

0 commit comments

Comments
 (0)