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

从贴图对象渲染反应组件

彭华皓
2023-03-14

在reactjs中,我试图从贴图对象渲染组件。更具体地说,按下一个按钮,我创建了一个新的“FormRow”组件,为了方便起见,我将其存储在javascript映射对象中(因为稍后我将使用它)。无论何时,我都想渲染刚刚添加的新组件,但我不知道如何从贴图中获取它。

我尝试以不同的方式解决我的问题,使用:

  1. myMap.for每个(key=

我没有尝试的是:

  1. https://stackoverflow.com/a/50183395/9282731(我不太清楚...)

这是我的密码:

作曲家。js:

  constructor() {
    super();
    this.state = {
      counter: 0,
      myMap: new myMap()
    };

    this.handleCreateNewRow = this.handleCreateNewRow.bind(this);
  }

  /** It returns a new FormRow. */
  handleCreateNewRow() {
    let cloneState = this.state;
    let newRow = (
      <FormRow // <-- the component that I want to render.
        key={this.state.counter}
        rowNumber={this.state.counter}
      />
    );

    cloneState.myMap.set(cloneState.counter, newRow);
    cloneState.counter++; // increment the counter for rows
    this.setState(cloneState);
  }

  render() {
    return (
      <div className="container-fluid m-3">
        <div className="col col-9  float-left">
          <div className="row">
            <div className="text-left">
              <h1>Form Builder</h1>
            </div>
          </div>

          {/* Here is the problem! It automaticly loads all the row created previously */}
          {this.state.myMap.forEach(value => {
            console.log(value); // check

            // it print me what I want, but it doesn't render it...
            return value;
          })}
        </div>
      </div>
    );
  }

控制台。日志(值)返回:

{$$typeof: Symbol(react.element), type: ƒ, key: "0", ref: null, props: {…}, …}

这是我期望的输出,但我不知道为什么渲染()方法不渲染它。如果您使用Array更改Map对象,则此示例可以工作,并且呈现()方法向用户呈现他所期望的内容。

共有3个答案

秦凯旋
2023-03-14

我对地图知道的不多,但是,从另一个角度来看,我会更加声明性地处理这个问题,因此,让我们假设在
handleCreateNewRow()
中,我会这样做。setState({counter:this.state.counter,anotherMeta..})

然后渲染
var行 = []; (让i=0; i

乐欣可
2023-03-14

而不是返回未定义的,使用map()on[... myMap.values()](这是将Map扩展到新数组中的值):

{[...this.state.myMap.values()].map(value => {
    return value;
})}

这将返回myMap中条目的值。或者,由于不需要修改值,短版本:

{this.state.myMap.values()}

另外,请注意,让cloneState=this。state实际上并不克隆状态,而是创建对同一对象的引用。因此,您可以将您的handleCreateNewRow()重写为:

handleCreateNewRow() {
    const counter = this.state.counter;
    let newRow = (
        <FormRow
            key={counter}
            rowNumber={counter}
        />
    );
    this.state.myMap.set(cloneState.counter, newRow);
    this.setState({counter: counter + 1, myMap});
} 

糜昌胤
2023-03-14

我看不出有任何理由使用映射当您使用序列号作为键时,仅使用数组更有意义。

但要从映射中获取所有值,请使用其方法:

{this.state.myMap.values()}

您的forEach无法工作,因为forEach始终返回undefined,并且不处理其回调返回值。

 类似资料:
  • 问题内容: 我有一些称为站的数据,它是一个包含对象的数组。 我想为每个数组位置渲染一个ui组件。到目前为止,我可以写 然后渲染 问题是我要打印所有数据。相反,我只想显示一个像这样的键,但是什么也不打印。 如何遍历此数据并为数组的每个位置返回一个新的UI元素? 问题答案: 您可以将工作站列表映射到ReactElements。 使用React> = 16时,可以从同一组件返回多个元素,而无需额外的ht

  • 我看过其他人提出的与此相关的问题,但找不到合适的答案。我希望将子对象传递给组件,然后在需要它们的地方拉出特定的子对象,我看到的大多数示例都是在相同的位置渲染子对象。 我的组件看起来像这样- 当我记录道具时。父组件中的子组件我得到一个数组,其中包含两个子组件作为对象。是否有一种简单的方法可以在我需要的地方提取特定的子对象,例如我正在使用这并不理想,因为我们将在将来动态传递子元素,并且数组长度可能会更

  • 所以就像标题所说的,我的应用程序的主页因为某种原因渲染了两次,我不知道为什么。从我的浏览器路由器,我最初调用一个JS文件,从那里我调用我的HomePage组件和React路由器,但然后我的页面渲染两次,我不知道为什么。 我的浏览器路由器(index.js): 然后pp.js被称为: 然后我的主页组件(index.jsx): 和路线。js: 但是我的页面是这样渲染的: 我真的很困惑,所以任何建议都会

  • 我有一个组件,它获取作为道具的项目集合,并将它们映射到作为父组件的子组件呈现的组件集合。我们使用存储在WebSQL中的图像作为字节数组。在函数中,我从项中获取图像ID,并对进行异步调用,以获取图像的字节数组。我的问题是,我不能在React中传播这个promise,因为它不是为了处理渲染中的promise而设计的(至少我可以告诉你)。我来自一个背景,所以我想我正在寻找类似于关键字的东西来重新同步分支

  • 或者问题应该是,如何将字符串转换为JSX? 在任何情况下,我都试图在我的反应原生应用程序上做一个性能黑客,要求我从字符串变量渲染反应原生组件。 例如, 现在在我的渲染函数中,我想像这样渲染它: 现在,如果我试图运行应用程序,它会给出一个错误,因为我试图在组件中呈现文本。如果我在渲染之前尝试将项目包装在文本中,它只会在屏幕上以纯文本的形式渲染项目,并显示所有

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