React 和 Javascript:等效于 C 函数原型?
React and Javascript: Equivalent for C function prototypes?
我用 React 做的一些实验得到了以下代码:
const BreadNav = props => {
const initial={
stack:[
{
name:"Home",
render:React.cloneElement(
props.children,
{pushElement:pushElement}
),
state:{}
}
],
};
const [state, setState] = React.useState(initial);
const pushElement = (oldState,elem) => {
let newStack = JSON.parse(JSON.stringify(state.stack));
newStack[newStack.length-1].state = oldState;
newStack.push(elem);
setState({
...state,
stack:newStack
});
}
return(
state.stack[state.stack.length-1].render
);
}
React 给了我 ReferenceError: can't access lexical declaration 'pushElement' before initialization
,这对行的顺序很有意义。如果这是 C,我只会抛出一个函数原型来声明 pushElement
并稍后定义它,但是我还没有看到 javascript 的答案。我该如何避免这个麻烦?
您可以使用函数 声明 ,即“”,而不是将函数值分配给 const
变量:
function BreadNav(props) {
const initial = {
stack: [
{
name: "Home",
render: React.cloneElement(props.children, {pushElement}),
state: {}
}
],
};
const [state, setState] = React.useState(initial);
function pushElement(oldState,elem) {
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
let newStack = JSON.parse(JSON.stringify(state.stack));
newStack[newStack.length-1].state = oldState;
newStack.push(elem);
setState({
...state,
stack: newStack
});
}
return state.stack[state.stack.length-1].render;
}
但在这种情况下,在 在 对象字面量中使用它之前先定义函数 会更合适:
const BreadNav = props => {
const pushElement = (oldState, elem) => {
let newStack = JSON.parse(JSON.stringify(state.stack));
newStack[newStack.length-1].state = oldState;
newStack.push(elem);
setState({
...state,
stack: newStack
});
};
const initial = {
stack: [
{
name: "Home",
render: React.cloneElement(props.children, {pushElement}),
state: {}
}
],
};
const [state, setState] = React.useState(initial);
return state.stack[state.stack.length-1].render;
}
你仍然可以参考下面声明的state
和setState
变量,它们在范围内,你只需要确保在它们初始化之前不要调用函数。
我用 React 做的一些实验得到了以下代码:
const BreadNav = props => {
const initial={
stack:[
{
name:"Home",
render:React.cloneElement(
props.children,
{pushElement:pushElement}
),
state:{}
}
],
};
const [state, setState] = React.useState(initial);
const pushElement = (oldState,elem) => {
let newStack = JSON.parse(JSON.stringify(state.stack));
newStack[newStack.length-1].state = oldState;
newStack.push(elem);
setState({
...state,
stack:newStack
});
}
return(
state.stack[state.stack.length-1].render
);
}
React 给了我 ReferenceError: can't access lexical declaration 'pushElement' before initialization
,这对行的顺序很有意义。如果这是 C,我只会抛出一个函数原型来声明 pushElement
并稍后定义它,但是我还没有看到 javascript 的答案。我该如何避免这个麻烦?
您可以使用函数 声明 ,即“const
变量:
function BreadNav(props) {
const initial = {
stack: [
{
name: "Home",
render: React.cloneElement(props.children, {pushElement}),
state: {}
}
],
};
const [state, setState] = React.useState(initial);
function pushElement(oldState,elem) {
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
let newStack = JSON.parse(JSON.stringify(state.stack));
newStack[newStack.length-1].state = oldState;
newStack.push(elem);
setState({
...state,
stack: newStack
});
}
return state.stack[state.stack.length-1].render;
}
但在这种情况下,在 在 对象字面量中使用它之前先定义函数 会更合适:
const BreadNav = props => {
const pushElement = (oldState, elem) => {
let newStack = JSON.parse(JSON.stringify(state.stack));
newStack[newStack.length-1].state = oldState;
newStack.push(elem);
setState({
...state,
stack: newStack
});
};
const initial = {
stack: [
{
name: "Home",
render: React.cloneElement(props.children, {pushElement}),
state: {}
}
],
};
const [state, setState] = React.useState(initial);
return state.stack[state.stack.length-1].render;
}
你仍然可以参考下面声明的state
和setState
变量,它们在范围内,你只需要确保在它们初始化之前不要调用函数。