如何正确地在显示页面上实现突变而不是在 react-admin 上的当前资源
How properly implement mutation on show page but not to the current resource on react-admin
我有显示页面,这个页面应该从它的资源加载数据,但这个页面不应该更新这个资源。此页面不应更新当前资源的项目,而应进行不同的更改。例如,我有 users 资源,我有 mywebsite.com/users/uniq-user-id/show 页面。我可以在此页面上看到用户。但是当我按下按钮时 - 请求不应该转到用户的资源,也不应该改变用户资源。而不是这个突变应该去(例如音乐)并在那里执行突变。我可以使用 useMutation 钩子,但我不确定使用这个钩子并将其放在按下按钮上是最好的解决方案。 react-admin 是否已经为这个特定案例创建了组件?
我认为 react-admin 没有这样的自定义组件,同意 useMutation。
您可以通过代理拦截 dataProvider 请求,并重新路由用户突变:
v2
import { UPDATE, UPDATE_MANY } from 'react-admin'
const routerDataProvider = dataProvider => (verb, resource, params) => {
if ((verb === UPDATE || verb === UPDATE_MANY) && resource === 'users') {
resource === 'music'
//transform params to match music resource expected format
}
return dataProvider(verb, resource, params)
}
v3
const routerDataProvider = dataProvider => ({
...dataProvider,
update: (resource, params) =>
dataProvider(resource === 'users' ? 'music' : resource, params),
updateMany: (resource, params) =>
dataProvider(resource === 'users' ? 'music' : resource, params),
})
我有显示页面,这个页面应该从它的资源加载数据,但这个页面不应该更新这个资源。此页面不应更新当前资源的项目,而应进行不同的更改。例如,我有 users 资源,我有 mywebsite.com/users/uniq-user-id/show 页面。我可以在此页面上看到用户。但是当我按下按钮时 - 请求不应该转到用户的资源,也不应该改变用户资源。而不是这个突变应该去(例如音乐)并在那里执行突变。我可以使用 useMutation 钩子,但我不确定使用这个钩子并将其放在按下按钮上是最好的解决方案。 react-admin 是否已经为这个特定案例创建了组件?
我认为 react-admin 没有这样的自定义组件,同意 useMutation。
您可以通过代理拦截 dataProvider 请求,并重新路由用户突变:
v2
import { UPDATE, UPDATE_MANY } from 'react-admin'
const routerDataProvider = dataProvider => (verb, resource, params) => {
if ((verb === UPDATE || verb === UPDATE_MANY) && resource === 'users') {
resource === 'music'
//transform params to match music resource expected format
}
return dataProvider(verb, resource, params)
}
v3
const routerDataProvider = dataProvider => ({
...dataProvider,
update: (resource, params) =>
dataProvider(resource === 'users' ? 'music' : resource, params),
updateMany: (resource, params) =>
dataProvider(resource === 'users' ? 'music' : resource, params),
})