reactjs - React 16.4 基于 Promise 的条件渲染

标签 reactjs

我正在尝试有条件地呈现一段代码。条件 canProject 可以为 true 或 false。这是使用 checkRole() 函数进行评估的。

问题是 checkRole() 返回一个 promise 。返回 promise 时,内容已经呈现。

如何使用 checkRole() 有条件地呈现代码块?请注意,我在 html 代码中的很多地方都使用了 canProject 条件,因此我想在 return ( 中根据需要通过添加 {可以项目 &&

render() {

  const canProject = checkRole('project'); //this returns a promise

  return (
    <div>
      <div className="row">
        {canProject &&
          <div className="col-lg-4">
          </div>
        }
      </div>
    </div>
  );
}

最佳答案

跟踪 promise 的状态:

this.state = {
  promiseFulfilled: false
}

const canProject = checkRole('project').then(() => this.setState({promiseFulfilled: true}))

render() {

  const { promiseFulfilled } = this.state

  if (promiseFulfilled) {
    return (
      <div>
        <div className="row">
          {canProject &&
            <div className="col-lg-4">
            </div>
          }
        </div>
      </div>
    )
  } else {
    return null
  } 
}

为了后代:这是使用 hooks 对较新版本的 React(版本 >16.8)执行此操作的正确方法:

const [ promiseFulfilled, setPromiseFulfilled ] = useState(false)

const canProject = checkRole('project').then(() => setPromiseFulfilled(true))

render() {

  if (promiseFulfilled) {
    return (
      <div>
        <div className="row">
          {canProject &&
            <div className="col-lg-4">
            </div>
          }
        </div>
      </div>
    )
  } else {
    return null
  } 
}

关于reactjs - React 16.4 基于 Promise 的条件渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63495653/

相关文章:

javascript - Material ui 中选项卡的内联样式不会改变颜色

javascript - 如何在选择器级别和 react native 值中存储js对象?

javascript - 将 javascript(ES6) 箭头表示法(简写)扩展为完整语法?

java - 上传文件时未找到 public javax.ws.rs.core.Response 类型参数的注入(inject)源

javascript - React.PropsWithChildren 除了 `children` 之外没有任何 Prop ?

javascript - 用 vanilla javascript 重写 React 功能组件

javascript - React + Redux - 当输入具有来自状态的值时,输入 onChange 非常慢

javascript - Material UI Carousel 上的多个元素

javascript - 使用 fetch 或 axios 发送身份验证 header

javascript - 在 React 中调用 API - item.map 不是函数