我修改了 ImageInput
的 onDrop
函数,以便它最终会从我的自定义函数返回一个 url。但是,我想将该返回值设置为 ImageInput
的 image
值。
...
const uploadImg = ( acceptedFiles ) => {
return Promise.resolve(uploadImageToServer(file))
.then( url => {
// do something ...
})
}
const ProductEdit = ({ classes, ...props }) => (
<Edit {...props} title={<ProductTitle />}>
<TabbedForm>
<FormTab label="resources.categories.tabs.details" path="details">
<ImageInput source="image" label="Related pictures" accept="image/*" options={{onDrop: uploadImg}}>
<ImageField source="image" src="url" title="title" />
</ImageInput>
</FormTab>
</TabbedForm>
...
这在功能组件中是否可能实现?我在其他答案中看到可以调用 this.props.change(...) 来将更改分派(dispatch)到 redux 表单。但这里我的uploadImg是一个脱离react.component上下文的普通函数,因此无法访问this。
否则我必须将这个组件重写为类组件吗?
最佳答案
好吧,我发现解决方案是创建一个自定义操作并使用 redux-form
的 connect
方法分派(dispatch)该操作。
使用FormDataConsumer
获取formData和调度方法。
+ import { FormDataConsumer, REDUX_FORM_NAME } from 'react-admin';
+ import { change } from 'redux-form';
+ import {changeImgUrl} from './actions';
...
const uploadImg = ( params, dispatch ) => {
result = await Promise.resolve(yourUploadImgFunc(params))
.then( res => return changeImgUrl(res) )
dispatch(change(REDUX_FORM_NAME, 'image', result))
}
const ProductEdit = ({ classes, ...props }) => (
<Edit {...props} title={<ProductTitle />}>
<TabbedForm>
<FormTab label="resources.categories.tabs.details" path="details">
<FormDataConsumer>
{({ formData, dispatch, ...rest }) => (
<Fragment>
<ImageInput source="image" label="Related pictures" accept="image/*" options={{onDrop: (params) => uploadImg(params, dispatch)}}>
<ImageField source="image" src="url" title="title" />
</ImageInput>
)}
</Fragment>
</FormDataConsumer>
</FormTab>
</TabbedForm>
...
然后定义一个新 Action :
// actions.js
export const CHANGE_IMG_URL = 'CHANGE_IMG_URL';
export const changeImgUrl = img_url => ({
type: CHANGE_IMG_URL,
url: img_url
});
摘要:
1. 从react-admin的FormDataConsumer
收集redux的dispatch
props。
2. 使用 redux-form 的 change
方法用您的自定义操作创建操作。
不确定这是否是最好的方法,但它确实有效。希望它可以帮助任何尝试在react-admin上进行自定义的人。
关于javascript - 从react-admin中的自定义函数回调修改特定的redux-form值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58641011/