编辑抽屉组件内的组件

时间:2019-09-17 11:32:23

标签: reactjs forms react-admin

我正在使用react-admin框架,并且试图将<Edit>组件放入<Drawer>组件中。我需要这样做是为了能够保存在JsonInput中所做的更改。

这是我的自定义组件:

import React, { Component, Fragment } from 'react';
import { fetchUtils, CardActions, EditButton, Button, List, Datagrid, Edit } from 'react-admin';
import Drawer from '@material-ui/core/Drawer';
import JsonInput from 'react-json-view';

import EditIcon from '@material-ui/icons/Edit';
import IconKeyboardArrowRight from '@material-ui/icons/KeyboardArrowRight';
import { SimpleForm } from 'ra-ui-materialui/lib/form';

const divStyle = {
 width: '400px',
 margin: '1em'
};

export default class JsonEditButton extends React.Component {
 constructor(props, context) {
  super(props, context);
  this.state = { showPanel: false };
 }

  handleClick = () => {
    this.setState({ showPanel: true });
  };

  handleCloseClick = () => {
    this.setState({ showPanel: false });
  };

  onChange = (value) => {
    const { updated_src, name, namespace, new_value, existing_value } = value;
    //this.onChange(updated_src);
  }

 render() {
  const { showPanel } = this.state;


  return (
    <div>
      <Button label="Upravit JSON" onClick={this.handleClick}>
        <EditIcon />
      </Button>

      <Fragment>
        <Drawer
          anchor="right"
          open={showPanel}
          onClose={this.handleCloseClick}
        >
          <div>
            <Button label="Zavřít" onClick={this.handleCloseClick}>
              <IconKeyboardArrowRight />
            </Button>
          </div>
          <div style={divStyle}>
            {props => (
              <Edit {...props}>
                <SimpleForm>
                  {this.props.record && <JsonInput src={this.props.record} name={null} displayDataTypes={false} displayObjectSize={false} onEdit={this.onChange} onAdd={this.onChange} onDelete={this.onChange} />}
                </SimpleForm>
              </Edit>
            )}
          </div>
        </Drawer>
      </Fragment>
    </div>
  );
 }
};

但是这不会返回任何HTML

有什么办法解决这个问题吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

也许这可以帮助

<div style={divStyle}>

              <Edit {...this.props}>
                <SimpleForm>
                  {this.props.record && <JsonInput src={this.props.record} name={null} displayDataTypes={false} displayObjectSize={false} onEdit={this.onChange} onAdd={this.onChange} onDelete={this.onChange} />}
                </SimpleForm>
              </Edit>

 </div>

{props => ()}实际上是函数的先前代码,或者您可以尝试使用

<div style={divStyle}>
            {props => (
              return(
              <Edit {...props}>
                <SimpleForm>
                  {this.props.record && <JsonInput src={this.props.record} name={null} displayDataTypes={false} displayObjectSize={false} onEdit={this.onChange} onAdd={this.onChange} onDelete={this.onChange} />}
                </SimpleForm>
              </Edit>)
            )}
          </div>