javascript - 如何在渲染之前将异步返回值插入到 prop 中?

标签 javascript reactjs async-await

我不确定我问的问题是否正确。但这就是我想要做的,当我在客户端上时,我对 csrf token 发出异步请求并将其插入 header 中。如何像这样在 header 中插入该值?当我使用时,我得到了未定义的 token 值和错误。

{ this.state.session.csrfToken }

constructor(props) {
    super(props);
    this.state = {
        session: props.session,
    };
}

async componentDidMount() {
    const session = await getSession();
    this.setState({
        session: session
    });
}

render() {
    const props = {
        headers: {
            'X-CSRF-Token': { this.state.session.csrfToken }  <-- bad creates error
        }
    }

最佳答案

您无法将 componentDidMount 设为 async 函数。 至少你不能异步使用它并延迟渲染功能。

您应该做的是在渲染函数中设置一个条件,直到 session 不可用。

像这样。

render() {
    if (!this.state.session || !this.state.session.csrfToken) {
      return <div>waiting for token</div>;
    }

    const props = {
        headers: {
            'X-CSRF-Token': { this.state.session.csrfToken }
        }
    }

因此,当 setState 再次调用 render 时 - state 将拥有 token ,并且它将呈现您希望正确呈现的内容。

关于javascript - 如何在渲染之前将异步返回值插入到 prop 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48656197/

相关文章:

javascript - 如何跳过 setInterval 函数的第一次延迟?

reactjs - 如何将一个类的状态作为另一个类的 props 传递?

javascript - 在 <div> 标签中包裹 react-leaflet Map 组件使其消失

c# - UserManager.CreateAsync(user, password) 陷入无限循环

node.js - Mongoose 异步请求管理

node.js - 如何确定导致 Node.js 中出现 UnhandledPromiseRejectionWarning 的原因?

javascript - 如何在ajax调用之前定义变量

javascript - Infragistics 网格导出到不同的位置

javascript - 让div在我的侧边栏的右边

reactjs - 如何在创建 React 应用程序中运行 eslint