在我通过 Redux 传递它的特殊情况下,这个箭头函数如何工作
How does this arrow function work in my special case passing it through Redux
我学习了 JavaScript 和 React Redux 并且有这个问题:.
假设我有这个 Redux dispatch
:
dispatch(setLogMessage( () =>{"Connecting to env1", 12340, "connecting"}));
上面的reducer在这里setLogMessage
是这样的:
const initialState = {
log: "",
};
case booksActionTypes.LOG_MESSAGE: {
return {
...state,
log: action.payload,
};
}
在 mapStateToProps
中它看起来像这样:
const [theLog, addLog] = useState([]);
useEffect(() => {
if (props.log !== "") {
addLog([...theLog, createData(props.log)]);
}
}, [props.log]);
function createData(message, timestamp, type) {
console.log('s');
return { message, timestamp, type };
}
问题是我想在这个上下文中学习箭头函数,并希望拥有上面的props.log
,成为一个函数来解决上面的() =>{"Connecting to env1", 12340, "connecting"})
并将它传递给function createData(..
。
希望你能理解我的问题!
从箭头函数中立即返回对象在语法上可能会造成混淆...
{
看似是开一个新的对象,实际上是开一个函数体
要解决此问题,请将对象括在括号中(还要注意对象 属性 名称):
() => ({ message: "Connecting to env1", timestamp: 12340, type: "connecting"})
第二个问题是你从来没有调用过这个函数。
props.log
持有该函数引用,因此要将其值作为 createData
的参数,您需要调用它(并传递各个值)。
const values = props.log();
createData(values.message, values.timestamp, values.type);
总结
- 隐式 returns 返回对象时需要用括号括起来。
- 对象必须包含一个属性名称,而不仅仅是一个值(这就是数组的用途)
- 函数必须被调用,而不仅仅是作为 props 传递。
我学习了 JavaScript 和 React Redux 并且有这个问题:.
假设我有这个 Redux dispatch
:
dispatch(setLogMessage( () =>{"Connecting to env1", 12340, "connecting"}));
上面的reducer在这里setLogMessage
是这样的:
const initialState = {
log: "",
};
case booksActionTypes.LOG_MESSAGE: {
return {
...state,
log: action.payload,
};
}
在 mapStateToProps
中它看起来像这样:
const [theLog, addLog] = useState([]);
useEffect(() => {
if (props.log !== "") {
addLog([...theLog, createData(props.log)]);
}
}, [props.log]);
function createData(message, timestamp, type) {
console.log('s');
return { message, timestamp, type };
}
问题是我想在这个上下文中学习箭头函数,并希望拥有上面的props.log
,成为一个函数来解决上面的() =>{"Connecting to env1", 12340, "connecting"})
并将它传递给function createData(..
。
希望你能理解我的问题!
从箭头函数中立即返回对象在语法上可能会造成混淆...
{
看似是开一个新的对象,实际上是开一个函数体
要解决此问题,请将对象括在括号中(还要注意对象 属性 名称):
() => ({ message: "Connecting to env1", timestamp: 12340, type: "connecting"})
第二个问题是你从来没有调用过这个函数。
props.log
持有该函数引用,因此要将其值作为 createData
的参数,您需要调用它(并传递各个值)。
const values = props.log();
createData(values.message, values.timestamp, values.type);
总结
- 隐式 returns 返回对象时需要用括号括起来。
- 对象必须包含一个属性名称,而不仅仅是一个值(这就是数组的用途)
- 函数必须被调用,而不仅仅是作为 props 传递。