ren*_*kre 5 reactjs redux react-redux
在我的react-redux应用程序中,我可以通过界面正确地更新一些数据,如下图所示。以下是更改redux状态的相应代码:
case UPDATE_COMMENT_SUCCESS:
const commentUpdated = action.payload.normalizedData;
return {
...state,
loading: false,
editing: false,
discussionPosts: {
...state.discussionPosts,
[commentUpdated.id]: {
...state.discussionPosts[commentUpdated.id],
content: commentUpdated.content
}
}
};
Run Code Online (Sandbox Code Playgroud)
下面是单击的按钮的onclick事件:
const onSubmit_updateComment = (event) => {
event.preventDefault();
props.updateComment({
Id: st_activeCommentToEdit,
Content: st_commentTextEdit,
UserId: currentUserId
});
set_activeCommentToEdit('');
}
Run Code Online (Sandbox Code Playgroud)
这是触发onSubmit_udatecomment
事件的表单:
<form onSubmit={onSubmit_updateComment} className="mt-2">
<div className="form-group">
<textarea
defaultValue={props.comments[commentId].content}
value={st_commentTextEdit}
className="form-control"
onChange={onChange_commentTextEdit}
/>
</div>
<div className="float-right">
<button className="btn btn-sm btn-info" type="submit">Update</button>
<button
className="btn btn-sm btn-light"
type="reset" onClick={(e) => { e.preventDefault(); set_activeCommentToEdit(0) }}>
Cancel
</button>
</div>
<div style={{ clear: 'both' }}></div>
</form>
Run Code Online (Sandbox Code Playgroud)
下面是更新数据库的代码(即,props.updateComment
从下面的代码):
export function UpdateComment(commentData) {
return dispatch => {
dispatch(dataOperationBegin());
axios({
method: 'post',
url: 'api/AssessmentDiscussionPost/Update',
data: {
Id: commentData.Id,
Content: commentData.Content,
PostOwnerId: commentData.PostOwnerId
}
})
.then(response => {
console.log('success: Updated the comment');
console.log(response.data);
dispatch(updateCommentSuccess(response.data));
toaster.notify('Comment is posted successfully.', {
duration: 2000
})
})
.catch(error => { dataOperationFailure(error) });
};
}
Run Code Online (Sandbox Code Playgroud)
我尝试了一下,toaster.notify
但仍然存在相同的问题。
这是主要组件中首次加载数据的代码:
useEffect(() => {
if (props.loading == false)//when the loading is complete
{
props.fetchReviewAlignPerspectivesdCardData(submissionId);
}
}, [submissionId])
Run Code Online (Sandbox Code Playgroud)
这是调度到道具的映射:
const mapDispatchToProps = (dispatch) => {
return {
fetchReviewAlignPerspectivesdCardData: (submissionId) => dispatch(FetchAlignPerspectivesData(submissionId)),
}
}
Run Code Online (Sandbox Code Playgroud)
此外,FetchAlignPerspectivesData
使axios调用数据库的函数如下:
export function FetchAlignPerspectivesData(submissionId) {
var url = 'api/x/y';
return dispatch => {
dispatch(alignPerspectivesDataOperationBegin);
axios.get(url, { params: { submissionId } })
.then(response => {
const alignPerspectives = new schema.Entity('alignPerspectives');
const assessments = new schema.Entity('assessments');
const discussionPosts = new schema.Entity('discussionPosts');
const childPosts = new schema.Array(discussionPosts);
discussionPosts.define({
childPosts: [childPosts]
});
alignPerspectives.define({
assessments: [assessments],
discussionPosts: [discussionPosts]
});
const normalizedData = normalize(response.data, alignPerspectives);
dispatch(fetchAlignPerspectivesCardSuccess(normalizedData))
})
.catch(error => { alignPerspectivesDataOperationFailure(error) });
}
}
Run Code Online (Sandbox Code Playgroud)
我认为这不是fetchReviewAlignPerspectivesdCardData
闪烁的原因(因为在更新字段时再也不会调用它了)。我想知道可能是这个问题的原因。有任何想法吗?
更新
似乎`
export const DATAOPERATION_BEGIN = "DATAOPERATION_BEGIN";
export const dataOperationBegin = () => ({
type: DATAOPERATION_BEGIN
})
Run Code Online (Sandbox Code Playgroud)
这是的化简代码case DATAOPERATION_BEGIN
,其中loading
设置为true
:
const alignPerspectivesReducer = (state = initialState, action) => {
switch (action.type) {
case DATAOPERATION_BEGIN:
return { ...state, loading: true, error: null };
Run Code Online (Sandbox Code Playgroud)
我想知道我的派遣方式dataOperationBegin
是否有问题。有任何想法吗?
如果没有完整的代码,很难重现,但看起来您不小心提交了一个表单,这可以通过任一设置<button type="button">...
(因为否则,默认情况下它将是一个提交按钮)或通过e.preventDefault
在表单上设置来修复。
归档时间: |
|
查看次数: |
218 次 |
最近记录: |