I'm trying to do a form using react and redux but when i add or edit something, only when i press F5 the list updates in my table.
what am i doing wrong?
Before i implemented redux, my table was updating.
My reducer:
const initialState = {
member: { avatar: '', name: '', email: '', project: '', devices: '', mainstack: '' },
list: [],
}
export default function membersReducer(state = initialState, action) {
switch(action.type){
case 'SAVE_MEMBER':
debugger
const newList = state.list.filter(member => member.id !== action.payload)
return {
...state,
list: newList }
My action:
import axios from 'axios';
import { BASE_URL } from '../components/member/Url.json';
export function saveMembers (member) {
return function (dispatch) {
const method = member.id ? 'put' : 'post';
const url = member.id ? `${BASE_URL}/${member.id}` : BASE_URL;
return axios[method](url, member).then(resp => {
debugger
dispatch ({
type: 'SAVE_MEMBER',
payload: member
})
})
}
}
My component:
save(member) {
this.props.saveMembers(member)
this.formik.resetForm()
}
const mapStatetoProps = state => ({ list: state.list })
function mapActionCreatorsToProp(dispatch) {
return {
saveMembers(newMember) {dispatch(saveMembers(newMember)) },
}
}
export default connect(
mapStatetoProps,
mapActionCreatorsToProp
)(MemberCrud);
Without Redux:
save(member) {
const method = member.id ? 'put' : 'post';
const url = member.id ? `${BASE_URL}/${member.id}` : BASE_URL;
axios[method](url, member).then((resp) => {
const list = this.getUpdatedList(resp.data);
this.setState({ member: initialState.member, list });
this.formik.resetForm()
});
}
getUpdatedList(member) {
const list = this.state.list.filter((u) => u.id !== member.id);
list.unshift(member);
return list;