3

在我单击保存按钮时,在 react-admin SimpleForm组件验证工作正常。单击保存按钮时,必填字段突出显示并标记为红色。

SaveButton只要表单无效,我想添加一个类名。这样我可以让用户清楚地知道他还没有完成表单并阻止用户点击它。

这是这种 SimpleForm 的简化版本。

import {
    required,
    //...
} from 'react-admin';

const UserCreateToolbar = props =>
    <Toolbar {...props}>
        <SaveButton
            label="user.action.save_and_show"
            redirect="show"
            submitOnEnter={true}
        />
    </Toolbar>;

export const UserCreate = props =>
    <Create {...props}>
        <SimpleForm
            toolbar={<UserCreateToolbar />}
        >
            <TextInput source="name" validate={[required()]} />
        </SimpleForm>
    </Create>;
4

3 回答 3

5

您可以创建自己的SaveButton组件,连接到 redux,该组件将从状态(查看 redux-form 文档)中获取始终record-form在 react-admin 中命名的表单的验证状态。

然后,您可以disabled在按钮上应用道具并最终调整其样式

于 2018-06-18T15:05:29.420 回答
5

这是我自己想出的 SaveButton 组件。它对我有用。感谢@Gildas 为我指明了正确的方向。

import React from 'react';
import PropTypes from 'prop-types';
import { reduxForm } from 'redux-form';
import { SaveButton } from 'react-admin';

const SaveButtonAware = ({ invalid, ...rest }) => (
    <SaveButton disabled={invalid} {...rest} />
);

SaveButtonAware.propTypes = {
    invalid: PropTypes.bool,
};

export default reduxForm({
    form: 'record-form',
})(SaveButtonAware);

更新。显然,这也有效。不知道为什么。

import React from 'react';
import PropTypes from 'prop-types';
import { SaveButton } from 'react-admin';

const SaveButtonAware = ({ invalid, ...rest }) => (
    <SaveButton disabled={invalid} {...rest} />
);

SaveButtonAware.propTypes = {
    invalid: PropTypes.bool,
};

export default SaveButtonAware;
于 2018-06-18T18:23:36.310 回答
0

您应该首先创建一个自定义工具栏,并将保存按钮的禁用元素设置为工具栏无效状态,如下所示。(工具栏总是有表单的状态)

import * as React from "react";
import {
  Toolbar,
  SaveButton
} from 'react-admin';

const CustomToolbar = (props) => (
  <Toolbar {...props}>
    <SaveButton disabled={props.invalid}/>
  </Toolbar>
);

导出默认自定义工具栏;

然后在您的表单中使用此自定义工具栏,如下所示:

<SimpleForm redirect="list" toolbar={<CustomToolbar/>}>
    {your form elements}
</SimpleForm>
于 2021-10-03T09:43:18.247 回答