私は還元剤がtables
であり、状態の1つがmainTables
である。私はreact-dnd
を使用してこれらのテーブルを配置しています。React js、還元状態をローカル状態に保存する最良の方法は何ですか?
const initialState = {
channel: null,
errors: null,
mainTables: [],
takeaways: [],
showMainTables: false,
showTakeaways: false,
};
ここで、私のtables_container
は以下のようになります。
constructor() {
super();
this.state = {
tables: []
}
this.fetchTables = this.fetchTables.bind(this);
this.moveTable = this.moveTable.bind(this);
this.saveTables = this.saveTables.bind(this);
}
componentDidMount(){
this.fetchTables()
}
fetchTables() {
httpGet('/api/v1/tables')
.then((response) => {
this.setState({
tables: response.main_tables
});
});
};
table_container
ユーザがdrag and drop
を通してそれを位置決めするtable
を移動させることができるテーブルの容器です。私はmainTables
をすべてのオブジェクトを格納するmainTable
に持っていますが、私はをローカル状態のtables
に格納するために使用します。ユーザーがテストのためだけにテーブルを移動し、好きな場合はsave
ボタンをクリックして保存できます。彼らはそれが好きではない場合、彼らはちょうどページを去ることができます。したがって、ユーザーがテーブルを移動するときには常に還元状態を変更する必要はありません。しかし、この方法では問題があります。ユーザーがテーブルを作成したときにthis.state.tables
を更新しません。をcomponentDidMount
に追加します。だからちょうど作成されたテーブルを表示するには、ユーザーがページを更新する必要があります..1)還元状態がローカル状態(this.state
)に格納され、 ?出来ますか? 2)新しいテーブルを作成するときにfetchTables
に電話できますか?そしてどうやって?
事前に感謝..
----方法
render() {
if (this.props.tables.showMainTables ==true){
const { hideSourceOnDrag, connectDropTarget, number } = this.props;
const { tables } = this.state;
return connectDropTarget(
<div style={styles}>
{Object.keys(tables).map((key) => {
const { x, y, number } = tables[key];
return (
<Table
key={key}
id={key}
x={x}
y={y}
number={number}>
</Table>
);
})}
<button onClick={this.saveTables}>Save</button>
</div>,
);
}
else return false;
}
ご返信ありがとうございます。しかし、私はあなたの答えを完全に理解していません...私がしたいのは、ローカルコンポーネントの状態 'this.state.tables'に' tables'の初期状態の 'mainTables'を保存することです。' mainTables'をローカルコンポーネントを作成し、 'componentDidMount'と' render'で 'setState'しようとしましたが、どちらも動作しませんでした。そこで、mainTablesをローカルコンポーネントの状態に保存する方法を探しています。 –
レンダリング方法を教えていただけますか? –
レンダリングメソッドを追加しました。 –