Хорошо, после многих итераций я нашел способ заставить его работать (я уверен, что это не самый красивый или самый эффективный, но он работает, поэтому я продолжу с ним). Я разместил код с изменениями ниже.
Я добавил строки updateState и forceUpdate при объявлении общей функции Parameter:
const Parameter = () => {
let viz = useSelector(state => state.fetchDashboard);
const parameterSelect = useSelector(state => state.fetchParameter)
const parameterCurrent = useSelector(state => state.currentParameter);
const [, updateState] = useState();
const forceUpdate = useCallback(() => updateState({}), []);
const dispatch = useDispatch();
const drawerOpen = useSelector(state => state.filterIconClick);
Затем добавил строку forceUpdate () здесь:
const handleParameterChange = (event, valKey, index, key) => {
parameterCurrent[key] = event.target.value;
return (
prevState => ({
...prevState,
parameterCurrent: parameterCurrent
}),
() => {
viz
.getWorkbook()
.changeParameterValueAsync(key, valKey)
.then(function () {
//some code describing an alert
});
})
.otherwise(function (err) {
alert(
//some code describing a different alert
);
});
forceUpdate() //added here
}
);
};
Затем вызвал forceUpdate в операторе возврата для элемента, который я хотел повторно визуализировать:
<RadioGroup
aria-label="parameter"
name="parameter"
value={forceUpdate, parameterCurrent[key]}//added forceUpdate here
onChange={(e) => dispatch(
handleParameterChange(e, valKey, index, key)
)}
>
Я проверил это, и он не нарушает никакой другой код. Спасибо!