当前位置: 首页 > 知识库问答 >
问题:

ReactJS:有没有办法渲染在公理中创建的组件?

何长恨
2023-03-14

我想这样做(显然不工作)< br >我可以将结果存储在一个状态中,并在< code>render()方法中呈现组件,但问题是我进行了许多调用,并将有许多res对象。我最终会有许多状态要维护,所以我想在< code>axios调用后只返回一个组件,而不是每次都改变许多状态。这可能吗?< br >

 class InstanceViewer extends React.Component {                                   
    constructor(props) {                                                         
        super(props);                                                                                                            
        this.MyComponent = {}                                                                              
    }                                                                            

    componentWillMount() {                                                       
        getData()                                                      
    }
    getData(){
        axios.get('/myurl/', {})                              
            .then((res) => {                                                     
                this.MyComponent = <h1> res </h1>           
            });                                                 
    }
    // I just put this line there because I don't know the correct way to do this
    render(){return({this.MyComponent})} 
}                                                                          

共有3个答案

吴凯
2023-03-14

问题是您的axios调用是异步的,而“this.MyComponent”在返回时是一个空对象。稍后会用响应更新状态,但您已经执行了引用此内容的代码行。MyComponent仍然是空对象。因此,您不会看到任何错误,也不会在DOM元素上看到任何预期的数据。该解决方案是一个三元运算符,仅呈现此结果。如果对象包含预期结果,则返回MyComponent。

贾飞章
2023-03-14

你可以这样做。您需要维护一个状态。每当来自 api 的数据到达时,请准备 元素并使用该元素设置状态。

class InstanceViewer extends React.Component {                                   
    constructor(props) {                                                         
        super(props);                                                                                                            
        this.state = {MyComponent: null}                                                                              
    }                                                                            

    componentWillMount() {                                                       
        getData()                                                      
    }
    getData(){
        axios.get('/myurl/', {})                              
            .then((res) => {      
                let elem = <h1>{res}</h1>
                // Set the state with created element. It will rerender the component and this element will be displayed.
                this.setState({MyComponent: elem})             
            });                                                 
    }
    render(){
     return(
      <div>
       // Render the state. Initially it will be null but after api result, it will display the content.
       {this.state.MyComponent}
      </div> 
    )} 
}        
徐洋
2023-03-14

这是可能的,但不推荐。您跳过了渲染生命周期,因此必须在获取数据后强制重新渲染:您可以在不调用setState的情况下强制React组件重新渲染吗?

但是我建议你只将res保持在组件状态:

class InstanceViewer extends React.Component {                                   
constructor(props) {                                                         
    super(props);                                                                                                            
    this.state = {res: ""}                                                                              
}                                                                            

componentWillMount() {                                                       
    getData()                                                      
}
getData(){
    axios.get('/myurl/', {})                              
        .then((res) => {
            this.setState({res})      
        });                                                 
}
render(){return(<h1>{this.state.res}</h1>)} 
 类似资料:
  • 问题内容: 例如我可以做: React将在哪里渲染: 目前,我遇到了错误: 在使用browserify和babelify进行转译时 问题答案: 从React v16.0版本开始,当您位于组件内部时,您可以呈现一个组件数组,而无需在额外的元素中包装项目: 切记仅设置按键。 更新 现在从16.2版本开始,您可以使用片段 短语法 在,您仍然无法渲染多个项目,因为react需要一个根。因此,您可以在中渲染

  • 我有一个非常简单的练习,我注册客户端名称(字符串),我使用数组来做到这一点,所以当我添加一个新的我将使用另一个辅助数组,然后增加原来的长度,或者我将使用System.array复制,有没有其他方法,逐渐增加数组长度,因为你需要添加元素到该数组,不涉及辅助数组?

  • 问题内容: 众所周知,Java总是在创建时初始化数组。即总是返回一个所有元素= 0的数组。我知道这对于对象数组是必须的,但是对于原始数组(可能是布尔型),在大多数情况下,我们并不关心初始值。 有人知道避免这种初始化的方法吗? 问题答案: 我已经做了一些调查。没有合法的方法在Java中创建未初始化的数组。甚至JNI NewXxxArray也会创建初始化的数组。因此,不可能确切知道数组清零的成本。尽管

  • 我想知道我是否可以使用MathJax渲染LaTeX符号,而不封装LaTeX符号周围的\(......\)。例如,对于\frac{2}{3}而不是\(\frac{2}{3}\),如果是,我如何设置它? 非常感谢!

  • 问题内容: 我试图通过对象属性(此示例的名称)并在函数的轻松循环中列出它们。我发现这样做有些尴尬,但这似乎不正确。 这是我得到的: 有一个更好的方法吗?我只需要一个循环即可遍历对象数组,列出所需的属性并创建许多html节点之一。 问题答案: 您可以简单地在数组上 映射

  • 我目前正在尝试使用chart.js在ReactJS中呈现条形图 信息: 官方网页-http://www.chartjs.org/docs/ GitHub-https://github.com/reactjs/react-chartjs 我的问题是,即使我的终端没有给我任何错误,我的本地服务器没有呈现任何东西。 这是我的代码: 如果我犯了一些愚蠢的错误,请容忍我,这是我编写的第一个React应用程序