gpt4 book ai didi

javascript - 一次更新设置多个 Ramda 镜头

转载 作者:行者123 更新时间:2023-11-30 20:09:16 29 4
gpt4 key购买 nike

Noobie 到 Ramda。所以,我面临着一些深度状态更新问题。有人推荐了 Ramda。现在我需要一些帮助。这是我的 react 状态

steps: {
currentStep: 1,
step1: {
data: {},
apiData: null,
comments:[],
reviewStatus: '',
reviewFeedback: ''
},
step2: {
data: {},
apiData: null,
comments:[],
reviewStatus: '',
reviewFeedback: ''
}
}

我为每个步骤制作了镜头 data ,apiData,comments ,reviewStatus, reviewFeedback

const step1ApiDataLens = lensPath(['steps', 'step1', 'apiData'])
const step1DataLens = lensPath(['steps', 'step1', 'data'])
const step1Status = lensPath(['steps','step1','reviewStatus'])
const step1Feedback = lensPath(['steps','step1','reviewFeedback'])

有时我需要单独更新 apiData 有时像 reviewStatus,reviewFeedback 一样。目前我正在通过 setState 回调处理它。有效,但有 3 到 4 个回调看起来很奇怪。还有其他方法可以同时设置多个镜头吗?

this.setState((state) => {
return set(step1ApiDataLens, response.data, state)
}, () => {
if (push) {
this.setState({
currentStatus: view(step1Status, this.state),
currentFeedback: view(step1Feedback, this.state)
}, () => {
this.setState((state)=>{
return set(currentStepLens,currentStep,state)
},()=>{
this.setState({
stepReady: true
})
})
})
}
});

最佳答案

您不应该对单个更新使用 async-after-set-state-callback。

this.setState(state => {
const upd1 = set(step1ApiDataLens, response.data, state);
if (push) {
const upd2 = {
...upd1,
currentStatus: view(step1Status, upd1),
currentFeedback: view(step1Feedback, upd1),
stepReady: true,
};
return set(currentStepLens, currentStep, upd2);
}
return upd1;
});

如果你不在镜头上使用 over,你可能不需要带有 ramda 的镜头,除非你想要类型检查/选择器抽象。 Ramda.path 和 Ramda.assocPath 可以很好地工作。

关于javascript - 一次更新设置多个 Ramda 镜头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52568357/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com