Error setting parent state from child using render props: "TypeError: <methodName> is not a function"
Error setting parent state from child using render props: "TypeError: <methodName> is not a function"
使用 Next.js / React.js 我已经使用官方 Next.js 教程中所示的设置构建了一个简单的应用程序。这意味着我正在使用 <Layout />
组件,它在不同的页面周围呈现。我在下面显示我的代码。
现在,我尝试使用渲染道具从子组件设置 <Layout />
组件的某些状态。执行此操作时出现以下错误:
TypeError: setLoginToken is not a function
谁能解释为什么会这样,并告诉我如何让它工作?单击
上的两个按钮之一时出现此错误
我的代码:
布局组件(components/Layout.js
)
import React from "react";
class Layout extends React.Component {
state = {
loginToken: "abc123"
};
setLoginToken = newToken => {
this.setState({ loginToken: newToken });
};
render() {
const { render } = this.props;
const { loginToken, setLoginToken } = this.state;
return (
<React.Fragment>{render({ loginToken, setLoginToken })}</React.Fragment>
);
}
}
export default Layout;
索引页 (pages/index.js
)
import React from "react";
import Layout from "../components/Layout";
class Index extends React.Component {
render() {
return (
<Layout
render={({ loginToken, setLoginToken }) => (
<div>
<p>Login token: {loginToken}</p>
<button onClick={() => setLoginToken("asdfasdf")}>Log in</button>
<button onClick={() => setLoginToken("")}>Logout</button>
</div>
)}
/>
);
}
}
export default Index;
我也试过以下,结果一样:
(setLoginToken) => setLoginToken("asdfasdf")
(setLoginToken) => setLoginToken("")
问题来自于您从 this.state
解构 setLoginToken
,而不是 this
。
你可以用
一次拍摄
const { state: { loginToken }, setLoginToken } = this
使用 Next.js / React.js 我已经使用官方 Next.js 教程中所示的设置构建了一个简单的应用程序。这意味着我正在使用 <Layout />
组件,它在不同的页面周围呈现。我在下面显示我的代码。
现在,我尝试使用渲染道具从子组件设置 <Layout />
组件的某些状态。执行此操作时出现以下错误:
TypeError: setLoginToken is not a function
谁能解释为什么会这样,并告诉我如何让它工作?单击
上的两个按钮之一时出现此错误我的代码:
布局组件(components/Layout.js
)
import React from "react";
class Layout extends React.Component {
state = {
loginToken: "abc123"
};
setLoginToken = newToken => {
this.setState({ loginToken: newToken });
};
render() {
const { render } = this.props;
const { loginToken, setLoginToken } = this.state;
return (
<React.Fragment>{render({ loginToken, setLoginToken })}</React.Fragment>
);
}
}
export default Layout;
索引页 (pages/index.js
)
import React from "react";
import Layout from "../components/Layout";
class Index extends React.Component {
render() {
return (
<Layout
render={({ loginToken, setLoginToken }) => (
<div>
<p>Login token: {loginToken}</p>
<button onClick={() => setLoginToken("asdfasdf")}>Log in</button>
<button onClick={() => setLoginToken("")}>Logout</button>
</div>
)}
/>
);
}
}
export default Index;
我也试过以下,结果一样:
(setLoginToken) => setLoginToken("asdfasdf")
(setLoginToken) => setLoginToken("")
问题来自于您从 this.state
解构 setLoginToken
,而不是 this
。
你可以用
一次拍摄const { state: { loginToken }, setLoginToken } = this