将 "record" 属性 设置为响应来自 API 调用 React/react-admin 的数据
Set "record" property to response data from API call in React/react-admin
在我的 react-admin
应用程序中有一个 Create
组件。我读到可以提供 record
属性 来初始化 Create
组件,如下所示。
const MyRecord = {
year: 2000,
name: "John Doe"
};
export const MyCreate = props => (
<Create record={MyRecord} {...props}>
<SimpleForm>
<DisabledInput source="year" />
<DisabledInput source="name" />
</SimpleForm>
</Create>
);
这有效,但现在我想要 MyRecord
,即 record
填充来自 API 调用的响应。像这样(伪代码)...
const response = API.get("/resource");
const MyRecord = {
year: response.data.year,
name: response.data.name
};
但是我不知道如何在 React/react-admin 中执行此操作。
这可能只会帮助您接近。但是,一种方法可能是使 MyCreate
成为 class 组件并分派 API 对 componentDidMount 上默认值的调用。您也可以根据情况更快地发送它。在生产中执行此操作的更好方法,但作为示例...
class MyCreate extends React.Component {
constructor(props) {
super(props);
// these will be our defaults while fetch is occurring.
this.state = {
record: {
year: 1900,
name: '',
id: 0
}
};
}
componentDidMount() {
//don't actually fetch in cdm
fetch('/resource').then(resp => this.setState({record: resp}))
}
render() {
return (
<Create {...this.props}>
<SimpleForm defaultValues={this.state.record}>
<DisabledInput source="year" />
<DisabledInput source="name" />
</SimpleForm>
</Create>
);
}
}
此外,除了覆盖 record
之外,您还可以在 <SimpleForm>
上使用 defaultValues 道具,这几乎是为此目的而设计的。
https://marmelab.com/react-admin/CreateEdit.html#default-values
在我的 react-admin
应用程序中有一个 Create
组件。我读到可以提供 record
属性 来初始化 Create
组件,如下所示。
const MyRecord = {
year: 2000,
name: "John Doe"
};
export const MyCreate = props => (
<Create record={MyRecord} {...props}>
<SimpleForm>
<DisabledInput source="year" />
<DisabledInput source="name" />
</SimpleForm>
</Create>
);
这有效,但现在我想要 MyRecord
,即 record
填充来自 API 调用的响应。像这样(伪代码)...
const response = API.get("/resource");
const MyRecord = {
year: response.data.year,
name: response.data.name
};
但是我不知道如何在 React/react-admin 中执行此操作。
这可能只会帮助您接近。但是,一种方法可能是使 MyCreate
成为 class 组件并分派 API 对 componentDidMount 上默认值的调用。您也可以根据情况更快地发送它。在生产中执行此操作的更好方法,但作为示例...
class MyCreate extends React.Component {
constructor(props) {
super(props);
// these will be our defaults while fetch is occurring.
this.state = {
record: {
year: 1900,
name: '',
id: 0
}
};
}
componentDidMount() {
//don't actually fetch in cdm
fetch('/resource').then(resp => this.setState({record: resp}))
}
render() {
return (
<Create {...this.props}>
<SimpleForm defaultValues={this.state.record}>
<DisabledInput source="year" />
<DisabledInput source="name" />
</SimpleForm>
</Create>
);
}
}
此外,除了覆盖 record
之外,您还可以在 <SimpleForm>
上使用 defaultValues 道具,这几乎是为此目的而设计的。
https://marmelab.com/react-admin/CreateEdit.html#default-values