我有一個包含行的表格,並且可以編輯一行內的每個單元格。有一個按鈕與每行關聯,將該行中的所有單元格提交給數據庫。我想知道的是,如果單元格中的數據已被更改,那麼如何從提交事件實際發生的組件中訪問新值?React - 從嵌套組件訪問更新值
這裏是我說,造表的那一刻:
主表:
import React from 'react';
import TableWithDataHeader from './TableWithDataHeader.jsx';
import Row from './Row.jsx';
import AppStore from '../../stores/AppStore';
export default class Table extends React.Component {
handleSubmitEvent = (e) => {
e.preventDefault();
/////What do I do here to get the updated values???////
};
render() {
return (
<div>
<div className="row">
<table className="table table-striped table-bordered">
<thead>
<TableWithDataHeader />
</thead>
<Row data={AppStore.getCells().historycells} handleSubmitEvent={this.handleSubmitEvent} />
</table>
</div>
</div>
);
}
}
行組件:
import React from 'react';
import TableBody from './TableBody.jsx';
import AppStore from '../../stores/AppStore';
export default class Row extends React.Component {
state = {data: this.props.data};
handleSubmitEvent = (e) => {
this.props.handleSubmitEvent(e);
};
render() {
let {data} = this.state;
return (
<tbody>
<tr id={AppStore.getRowId()}>
{this.state.data.map(cell => {
return (
<TableBody key={cell.id} cell={cell.contents} />
);
})}
<td className="table-button">
<button type="submit" className="btn btn-primary" onClick={this.handleSubmitEvent.bind(this)}>Save Row</button>
</td>
</tr>
</tbody>
);
}
}
電池組件:
import React from 'react';
import EditableCells from './EditableCells.jsx';
export default class TableBody extends React.Component {
render() {
return (
<EditableCells data={this.props.cell} />
);
}
}
編輯單元格C omponent:
import React from 'react';
export default class EditableCells extends React.Component {
state = {isEditMode: false, data: ""};
componentWillMount() {
this.setState({
isEditMode: this.props.isEditMode,
data: this.props.data
});
}
handleEditCell = (e) => {
this.setState({isEditMode: true});
};
handleKeyDown = (e) => {
switch (e.keyCode) {
case 13: //Enter
this.setState({isEditMode: false});
break;
}
};
handleChange = (e) => {
this.setState({data: e.target.value});
};
render() {
let {isEditMode, data} = this.state;
let cellHtml;
if (this.state.isEditMode) {
cellHtml = <input type="text" className="form-control" value={this.state.data} onKeyDown={this.handleKeyDown} onChange={this.handleChange} />
} else {
cellHtml = <div onClick={this.handleEditCell}>{this.state.data}</div>
}
return (
<td className="text-center">{cellHtml}</td>
);
}
}
如何,我將能夠做到這將是非常有益的,當然的任何幫助,非常感謝!
感謝您的時間
感謝這個例子幫我整理了一下! – BeeNag
只是想問一個簡單的問題,我將如何去切換輸入,以便在表格首次渲染時不顯示,並通過單擊單元格來訪問它。 – BeeNag
只需使用狀態來跟蹤行是否可編輯,並根據狀態呈現不同的內容。在更新後的示例中,我在渲染輸入和div之間切換,請參閱Row組件:https://jsfiddle.net/dannyjolie/4jfxeag8/5/ – dannyjolie