當在transformErrors回呼中映射錯誤時,我需要知道相關輸入的實際值。
。我需要這個來創建一個系統,以便將多個現有格式合成為新的復合格式。我希望將輸入值與每個 "基本 "格式進行匹配,并為失敗的格式顯示錯誤。allOf合成格式的方法不幸的是,由于我的專案所特有的原因,它并不適合我。
我試著將表單資料注入到我的tranformErrors回呼中,通過currying并直接讀取資料:
import _ from 'lodash'
import Form from '@rjsf/core'
const makeTransformErrors = formData => errors => /span> {
errors.forEach(error => {
if (error.name == 'format') {
const value = _.get(formData, error.property)
// ...。
}
})
}
const WrapedForm = (formData, ... rest) => {
const transformErrors = makeTransformErrors(formData)
return (
<Form
transformErrors={transformErrors}
formData={formData}。
{...rest}。
/>
)
但是這種方式value比表單的實際狀態滯后一個按鍵,這就是我所期望的。不幸的是,即使我不直接將formData傳入makeTransformErrors,而是傳入一個包含formData的物件,并直接在Forms onChange中即時突變它,這也是我所期望的作業。
訪問欄位值的其他可能方式是什么?
uj5u.com熱心網友回復:
不確定你到底想做什么樣的錯誤驗證,但你是否嘗試過使用validate?
它可以這樣傳遞 :
<Form .... validate={validate}。/>
其中validate是一個函式,以formData和errors作為引數。
參見這里的檔案
。uj5u.com熱心網友回復:
好吧,我找到了一個實作我想要的東西的方法,但它太黑了,我不認為我想使用它。當我將上面提到的道具突變技巧與使用getter來獲取訊息時,我可以得到最新的值,將評估推遲到訊息被實際讀取時,這恰好足夠了:
import _ from 'lodash'/span>
import Form from '@rjsf/core'
const makeTransformErrors = formDataRef => errors => /span> {
return errors.map(error => {
if (error.name !== 'format') return error
return {
...錯誤。
get message() {
const value = _.get(propPath, formDataRef.current) //works! 但代價是什么...
}
}
})
}
const WrapedForm = (formData, onChange, ... rest) => {
const formDataRef = React.useRef(formData)
const transformErrors = makeTransformErrors(formDataRef)
handleChange = (params) => {
formDataRef.current=params.formData
onChange(params)
}
return (
<Form。
transformErrors={transformErrors}
onChange={handleChange}。
formData={formData}。
{...rest}。
/>
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/328679.html
標籤:
上一篇:通過代理驗證IstioToken
