【发布时间】:2018-05-31 06:44:47
【问题描述】:
我正在使用 Visual Studio 2017 提供的 reactjs 模板创建一个小型 Web 应用程序。我陷入了一种情况,我希望将一个函数作为状态传递给子组件,然后通过子组件调用该函数。我有一个标头组件,其中有一个名为 setLogInTrue() 的方法,我想将其传递给我的 SignIn 组件。以下是我的代码:-
Header.tsx
class HeaderState {
isLoggedIn: boolean;
}
export class Header extends React.Component<HeaderProps, HeaderState> {
constructor() {
super()
this.state = ({ isLoggedIn: false });
this.setLogInTrue= this.setLogInTrue.bind(this);
}
setLogInTrue() {
this.setState({ isLoggedIn: true });
}
public render(){
//Some elements
<NavLink className="link header_row_link" to={{ pathname: '/signIn', state: this.setLogInTrue }}> //<-- i thought this would work and give the function in the location of SignIn components state but it does not.
Sign In
</NavLink>
}
}
登录.tsx
export class SignIn extends React.Component<RouteComponentProps<{}>, {}> {
constructor() {
super();
}
public render() {
return <div className="signin_wrapper">
<SignInContent />
</div>;
}
}
我想在此处访问该函数并将其传递给 SignInContent 组件,然后从那里调用该函数。
这段代码没有给我任何编译时错误,但是每当我点击登录链接时,它都会给我以下错误
未捕获的 DOMException:无法在“历史”上执行“pushState”:无法克隆 function () { [native code] }。
我尝试了this 解决方案,但它对我不起作用。它仍然给我这个错误或给状态为未定义。我很新的反应,任何帮助将不胜感激
【问题讨论】:
-
来自MDN: "
pushState()接受三个参数:state 对象、标题和 URL。" -> "状态对象可以是任何可以序列化" -> "从Gecko 6.0 (Firefox 6.0 ...)开始,对象使用结构化克隆算法。" -> "结构化克隆不起作用的东西:Error和Function对象 不能被结构化克隆算法复制;尝试这样做将引发 DATA_CLONE_ERR 异常。" -
如果该功能不被允许,那么是否有替代方法?
标签: reactjs typescript visual-studio-2017