我正在使用用 Field react-final-form 包装的 material-ui-chip-input。

我只想将“CHIPS”限制为 5。
芯片是表示输入、属性或动作的紧凑元素。
如您所见,我在这里使用了两种状态
- 反应使用状态
- react-final-form 内部状态
这是多余的,因为 react-final-form 在内部处理了状态,但我无法正常工作,我只是在展示我到目前为止所做的事情。
我的实现基本上有两个问题。
- 它不会限制我的筹码。
- 我的 react-final-form 字段值 - 单击 DeleteChip 时不更新
import ChipInput from 'material-ui-chip-input'
import { Field } from 'react-final-form'
const [state, setState] = useState([])
const AddChip = useCallback(
(chip) => {
if (state.length + 1 <= 5) {
setState((prev) => ([...prev.tags, chip]))
}
},
[setState, state.length]
)
const DeleteChip = useCallback(
(chip) => {
setState((prev) => (...prev.state.filter((p) => p !== chip)]
}))
},
[setState]
)
return (
<Field name="states" validate={isRequired} >
{({ input: { value, onChange, ...rest }, meta }) => {
<ChipInput
defaultValue={Array.isArray(value) ? value : []} // check value first because material-ui-chip-input require an array, by default react-final-form value is empty string
onChange={(event) => { // uncontrolled
AddChip(event)
onChange(event)
// I tried below code but same result not working
// if (state.length + 1 <= 5) {
// onChange(event)
// }
}}
onDelete={DeleteChip}
/>
}}
</Field>
)