如果有用戶列表,並且每個Entry都有一個按鈕»EDIT«。如果用戶點擊它會發生以下情況:組件的每個實例的React/Redux-Individual狀態
- 請求的形式
- 服務器組件
<UserEditForm />
添加到進口,什麼擴展進入
這工作得很好,除了一兩件事:如果點擊其他按鈕,則表單的每個實例都會接收到最後一個請求的用戶表單的數據。那是因爲我在州內只有一個userform
屬性。
因此,要解決這個問題我想換userform
到userforms
應該/可能是這樣的一個對象:
userforms: {
<id of first instance>: { … }, //formdata
<id of second instance>: { … },
…
}
但因爲我是新來的反應,和/ Redux的我真的不知道該怎麼做,或者「正確」的方法或最佳實踐是真正做到這一點。
我的想法是創建一個高階組件,像這樣:
import React from 'react';
import {connect} from 'react-redux';
import {uuid} from '../../helpers/uuid';
export const formdatainstance = (FormInstance) => {
let id = null;
class FormDataMapper extends React.Component {
constructor (props) {
super(props);
id = uuid();
}
render() {
//extract the formdata from the state
//using the id
return <FormInstance { ...this.props } />
}
}
const mapStateToProps = (state) => {
console.log(id); //is null for one run
return {
userforms: state.userforms
};
};
return connect(mapStateToProps)(FormDataMapper);
}
所以在List組件,我可以:
import UserEditForm from './UserEditForm';
import {formdatainstance} from './formdatainstance';
const MappedUserEditForm = formdatainstance(UserEditForm);
class List extends React.Component {
render(){
return (
{users.map(user => {
//more stuff
<MappedUserEditForm />
//more stuff
})}
);
}
}
所以我的問題:這是個好主意?如果是,那麼執行清理的正確方法是什麼,所以當在組件的生命週期中,我應該從狀態中刪除數據?有沒有另一種方法可以做到這一點?
感謝您的幫助!
你想保持多個表單數據(每個用戶)處於狀態?或者你有一個表單數據的狀態對象就足夠了,這是由用戶填充的,並且當你點擊編輯另一個用戶時重置?你也可以發佈你的reducer的相關代碼嗎? –
我想爲渲染表單的每個實例擁有唯一的表單數據。因此,如果列表中有三個用戶,我想最終以三種形式顯示每個用戶的數據,這些數據可以單獨編輯和提交。 – philipp
我也很高興抽象這個功能,以便它可以應用到其他組件,它代表了系統中其他實體的另一種形式。 – philipp