React Admin-以表格形式获取当前值

Nic*_*ern 6 react-admin

我很难在编辑表单中获取记录的“更新”值。即使我有一个链接到正确的记录源的输入也应该更新它,但我始终会获得初始记录值。

是否有其他方法来获取SimpleForm的值?

我有一个简单的编辑表格:

<Edit {...props}>
    <SimpleForm>
        <MyEditForm {...props} />
    </SimpleForm>
</Edit>
Run Code Online (Sandbox Code Playgroud)

MyEditForm如下:

class MyEditForm extends React.Component {
    componentDidUpdate(prevProps, prevState, snapshot) {    
        console.log(prevProps.record.surface, this.props.record.surface); // <-- here is my problem, both values always get the initial value I had when I fetched the resource from API
    }

    render() {
        return (
            <div>
                <TextInput source="surface" />
                <!-- other fields -->
            </div>
         );
    }
}
Run Code Online (Sandbox Code Playgroud)

我通常采用这种方式从其他组件获取更新后的组件数据,但是就React-admin表单而言,我无法使其正常工作。

谢谢,

尼古拉斯

Gil*_*cia 16

这实际上取决于您要使用这些值做什么。如果要基于另一个输入的值隐藏/显示/修改输入,FormDataConsumer则首选方法:

例如:

import { FormDataConsumer } from 'react-admin';

const OrderEdit = (props) => (
    <Edit {...props}>
        <SimpleForm>
            <SelectInput source="country" choices={countries} />
            <FormDataConsumer>
                {({ formData, ...rest }) =>
                     <SelectInput 
                         source="city"
                         choices={getCitiesFor(formData.country)}
                         {...rest}
                     />
                }
            </FormDataConsumer>
        </SimpleForm>
    </Edit>
); 
Run Code Online (Sandbox Code Playgroud)

您可以在输入文档中找到更多示例。看一下链接两个输入基于其他输入隐藏输入

但是,如果要在MyEditForm组件的方法中使用表单值,则应使用reduxForm 选择器。这是更安全的方法,因为即使我们在商店中更改reduxForm状态所在的键,它也将起作用。

import { connect } from 'react-redux';
import { getFormValues } from 'redux-form';

const mapStateToProps = state => ({
    recordLiveValues: getFormValues('record-form')(state)
});

export default connect(mapStateToProps)(MyForm);
Run Code Online (Sandbox Code Playgroud)