Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在react admin中访问自定义组件中的表单数据?_Javascript_Reactjs_React Admin_React Final Form - Fatal编程技术网

Javascript 如何在react admin中访问自定义组件中的表单数据?

Javascript 如何在react admin中访问自定义组件中的表单数据?,javascript,reactjs,react-admin,react-final-form,Javascript,Reactjs,React Admin,React Final Form,我需要根据表单的状态字段更改工具栏按钮的行为。 我不知道如何访问当前表单数据以读取状态值 我尝试在周围的组件中使用FormDataConsumer(Toolbar,在我的例子中)并将formData作为道具传递,但这产生了一个副作用,即按钮内部的handleSubmitWithRedirect 我想直接在按钮组件内部读取表单数据。我该怎么做 当前代码: // ---------------------------------------------------------------------

我需要根据表单的状态字段更改工具栏按钮的行为。 我不知道如何访问当前表单数据以读取状态值

我尝试在周围的组件中使用
FormDataConsumer
Toolbar
,在我的例子中)并将formData作为道具传递,但这产生了一个副作用,即按钮内部的
handleSubmitWithRedirect

我想直接在按钮组件内部读取表单数据。我该怎么做

当前代码:

// ------------------------------------------------------------------------------------------
const StatusButton= ({ handleSubmitWithRedirect, ...props }) => {
    const form = useForm();

    const handleClick = useCallback(() => {
        switch (props.formdata.status.id) {   
            case 0:
                form.change('status', status[1]);
                break;
            case 1:
                form.change('status', status[2]);
                break;
            default:
        }
        handleSubmitWithRedirect('list');
    }, [form]);

    return <SaveButton {...props} handleSubmitWithRedirect={handleClick} />;
};

// ------------------------------------------------------------------------------------------
export const MyToolbar= props => (
    <Toolbar {...props} >
        <SaveButton
            label="Speichern"
            redirect="list"
            submitOnEnter={true}
            variant="text"
        />

        <FormDataConsumer>
            {({ formData, ...rest }) =>
                <StatusButton
                    label="Statuswechsel"
                    redirect="list"
                    submitOnEnter={false}
                    variant="text"
                    formdata={formData}  
                />
            }
        </FormDataConsumer>
    </Toolbar>
);
//------------------------------------------------------------------------------------------
const StatusButton=({handleSubmitWithRedirect,…props})=>{
const form=useForm();
const handleClick=useCallback(()=>{
开关(props.formdata.status.id){
案例0:
形式变更(“状态”,状态[1]);
打破
案例1:
形式变更(“状态”,状态[2]);
打破
违约:
}
handleSubmitWithRedirect(“列表”);
},[表格];
返回;
};
// ------------------------------------------------------------------------------------------
导出常量MyToolbar=props=>(
{({formData,…rest})=>
}
);
更新: 您可以在codesandbox中看到一个示例:


可以通过以下方式读取当前表单的字段值:

import { useForm } from 'react-final-form';

const form = useForm();
var formdata = form.getState().values;

formdata
包含作为对象的整个表单值。

不确定意图<代码>使用表单并执行相同的操作,带来上下文。。。对于
useForm
,您可以从文档中获取
form
-允许API访问。。。然后看起来应该是
form.getStatus()。value
?“status”是一个自定义表单字段,在我的例子中,它包含一个id名称元组对象。我在文档说明中找不到如何使用“表单”访问表单数据的任何提示。
form.getStatus().values.status
。。。。获取
form.getStatus()
到某个变量中,并使用调试器/dev工具进行检查。。。。准备的目的是检查当前工作流步骤(在我的例子中称为status),而不是表单的技术状态没有表单。getStatus()