blog

テーブルエディタ tableCell

import React from 'react'; import { Form, Input } from 'antd'; }. const =...

Jun 23, 2020 · 2 min. read
import React from 'react';
import { Form, Input } from 'antd';
const EditableContext = React.createContext();
const EditableRow = ({ form, index, ...props }) => (
	<EditableContext.Provider value={form}>
		<tr {...props}/>
	</EditableContext.Provider>
);
const EditableFormRow = Form.create()(EditableRow);
class EditableCell extends React.Component {
	constructor(props) {
		super(props);
		this.state = {
			editing: false
		};
	}
	toggleEdit = () => {
		const editing = !this.state.editing;
		this.setState({ editing }, () => {
			if (editing) {
				this.input.focus();
			}
		});
	};
	save = e => {
		const { record, handleSave } = this.props;
		this.form.validateFields((error, values) => {
			// if (error && error[e.currentTarget.id]) {
			// 	onError();
			// 	return;
			// }
			this.toggleEdit();
			handleSave({ ...record, ...values });
		});
	};
	renderCell = form => {
		this.form = form;
		let { editing } = this.state;
		const { title, dataIndex, record, children } = this.props;
		return editing ?
			<Form.Item style={{ margin: 0 }}>
				{form.getFieldDecorator(dataIndex, {
					rules: [{ required: true, message: `${title}NULLにできない` }],
					initialValue: record[dataIndex]
				})(
					<Input ref={node => (this.input = node)}
						 onBlur={this.save}
						 onPressEnter={this.save}/>
				)}
			</Form.Item>
			:
			<div className="editable-cell-value-wrap"
				 style={{ paddingRight: 24 }}
				 onClick={this.toggleEdit}>
				{children} <i className="iconfont icon-edit cursor-pointer text-primary font-size-12 ml-1"/>
			</div>;
	};
	render() {
		const {
			editable,
			dataIndex,
			title,
			record,
			index,
			handleSave,
			children,
			...restProps
		} = this.props;
		return (
			<td {...restProps}>
				{editable ? (
					<EditableContext.Consumer>{this.renderCell}</EditableContext.Consumer>
				) : (
					children
				)}
			</td>
		);
	}
}
const components = {
 body: {
 row: EditableCell.EditableFormRow,
 cell: EditableCell.EditableCell
 }
};
const columns = this.state.columns.map(col => {
 if (!col.editable) {
 return col;
 }
 return {
 ...col,
 onCell: record => ({
 record,
 editable: col.editable,
 dataIndex: col.dataIndex,
 title: col.title,
 handleSave: this.handleSave
 })
 };
});
Read next

Objective-Cにおけるアトミックと非アトミック入門。

アトミックについて説明する前に、アトミックとアトミック演算が実際にどのようなものかを見ておくことが重要です。原子とは、その名前が示すように、最小の不可分な粒子です。ここではクォーク粒子を方程式から除外して、原子という言葉を象徴することができます。アトミック操作とは、1つまたは一連の不可分でブロック化された操作のことです。 Objective-Cでは、プロパティはデフォルトでアトミックです。公式ドキュメントによると...

Jun 18, 2020 · 3 min read