Я стажер в реактивном шаблоне и пытаюсь найти лучший рефакторинговый подход к обработке множественных входов, аналогичный моему предыдущему обучающему проекту, функции 'onChange' с использованием setState, в котором не реализована избыточность.
onChange=(event)=>{
await this.setState({
[event.target.name]: event.target.value
})
}
Фрагмент моего текущего подхода в реактивном шаблоне ниже:
action. js
export function getSupplierId(supplierId) {
return {
type: GET_SUPPLIERID,
supplierId,
}
}
export function getModelId(modelId) {
return {
type: GET_MODELID,
modelId,
}
}
export function getProcessorId(processorId) {
return{
type: GET_PROCESSORID,
processorId,
}
}
Редуктор. js
const assetHomePageReducer = (state = initialState, action) =>
produce(state, draft => {
switch (action.type) {
case GET_SUPPLIERID:
draft.supplierId = parseInt(action.supplierId) ;
console.log('Supplier: '+ action.supplierId)
break;
case GET_PROCESSORID:
draft.processorId = parseInt(action.processorId);
console.log('Processor: '+ action.processorId)
break;
case GET_MODELID:
draft.modelId = action.modelId;
console.log('Model: '+ action.modelId)
break;
case GET_MEMORYID:
draft.memoryId = action.memoryId;
console.log('Memory: '+ action.memoryId)
break;
}
});
селектор. js
const makeSelecSupplierId = () =>
createSelector(
selectAssetHomePageDomain,
assetHomeModalState => assetHomeModalState.supplierId
)
const makeSelectModelId = () =>
createSelector(
selectAssetHomePageDomain,
assetHomeModalState => assetHomeModalState.modelId
)
const makeSelectProcessorId = () =>
createSelector(
selectAssetHomePageDomain,
assetHomeModalState => assetHomeModalState.processorId
)
const makeSelectMemorylId = () =>
createSelector(
selectAssetHomePageDomain,
assetHomeModalState => assetHomeModalState.memoryId
)
index. js
function mapDispatchToProps(dispatch) {
return {
OnChangeSupplierId: event => {
let index = event.target.selectedIndex;
let element = event.target.childNodes[index]
let optionID = element.getAttribute('id')
dispatch(getSupplierId(optionID))},
OnChangeProcessorId: event => {
let index = event.target.selectedIndex;
let element = event.target.childNodes[index]
let optionID = element.getAttribute('id')
dispatch(getProcessorId(optionID))},
};
}
Каждый вход имеет свою функцию и делает мои коды длинными.