一次更新设置多个 Ramda 镜头
Updating Setting Multiple Ramda lens once
Noobie 到 Ramda。所以,我面临着一些深度状态更新问题。有人推荐了 Ramda。现在我需要一些帮助。
这是我的反应状态
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'])
有时我需要像 reviewStatus,reviewFeedback
一样单独更新 apiData
。目前我正在通过 setState
callback.It 处理它,但有 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 的镜头,除非你想要 typechecking/selector-abstraction。 Ramda.path 和 Ramda.assocPath 可以很好地工作。
Noobie 到 Ramda。所以,我面临着一些深度状态更新问题。有人推荐了 Ramda。现在我需要一些帮助。 这是我的反应状态
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'])
有时我需要像 reviewStatus,reviewFeedback
一样单独更新 apiData
。目前我正在通过 setState
callback.It 处理它,但有 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 的镜头,除非你想要 typechecking/selector-abstraction。 Ramda.path 和 Ramda.assocPath 可以很好地工作。