Javascript 如何在定义了返回流类型的减速器上使用Object.assign with literals
我正在编写一个reducer,它将与Javascript 如何在定义了返回流类型的减速器上使用Object.assign with literals,javascript,reactjs,ecmascript-6,flow-js,Javascript,Reactjs,Ecmascript 6,Flow Js,我正在编写一个reducer,它将与React.useReducerhook一起使用。使用了流,但由于Object.assign({},state…将{}作为与SearchLocationStateType不兼容的对象文本,因此还原程序遇到了流错误。 我找到的唯一解决方案是列出每个对象文字的所有属性,这不是正确的方法 我怎样才能解决这个问题 type SearchLocationStateType = { textAreaFocused: boolean, promptsShow
React.useReducer
hook一起使用。使用了流,但由于Object.assign({},state…
将{}
作为与SearchLocationStateType
不兼容的对象文本,因此还原程序遇到了流错误。
我找到的唯一解决方案是列出每个对象文字的所有属性,这不是正确的方法
我怎样才能解决这个问题
type SearchLocationStateType = {
textAreaFocused: boolean,
promptsShown: boolean,
};
export const ACTIONS = Object.freeze({
FOCUS_SEARCH_TEXT: 'FOCUS-SEARCH-TEXT',
BLUR_SEARCH_TEXT: 'BLUR-SEARCH-TEXT',
});
type ActionType = {
type: $Values<typeof ACTIONS>,
};
const reducer = (state: SearchLocationStateType, action: ActionType): SearchLocationStateType => {
switch (action.type) {
case ACTIONS.FOCUS_SEARCH_TEXT:
return Object.assign({}, state, {textAreaFocused: true});
case ACTIONS.BLUR_SEARCH_TEXT:
return Object.assign({}, state, {textAreaFocused: false});
default:
return state;
}
};
type SearchLocationStateType={
textAreaFocused:boolean,
提示显示:布尔,
};
export const ACTIONS=Object.freeze({
焦点搜索文本:“焦点搜索文本”,
模糊搜索文本:“模糊搜索文本”,
});
类型ActionType={
类型:$value,
};
const reducer=(状态:SearchLocationStateType,操作:ActionType):SearchLocationStateType=>{
开关(动作类型){
案例操作。焦点\搜索\文本:
返回Object.assign({},state,{textAreaFocused:true});
案例操作.BLUR\u搜索\u文本:
返回Object.assign({},state,{textAreaFocused:false});
违约:
返回状态;
}
};
使用类型转换不够,如下所示:return Object.assign({},state,{textAreaFocused:true})作为SearchLocationStateType;可能您的意思是return(Object.assign({},state,{textAreaFocused:true}):SearchLocationStateType);
但这会引发同样的问题,就在括号内您可以发布错误消息吗?出于好奇,您是否有理由选择Object.assign而不是Object Destructuring?作为替代,您可以始终使用属性扩展语法:返回{…state,textAreaFocused:true};