在reactjs中,我试图从贴图对象渲染组件。更具体地说,按下一个按钮,我创建了一个新的“FormRow”组件,为了方便起见,我将其存储在javascript映射对象中(因为稍后我将使用它)。无论何时,我都想渲染刚刚添加的新组件,但我不知道如何从贴图中获取它。
我尝试以不同的方式解决我的问题,使用:
我没有尝试的是:
这是我的密码:
作曲家。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对象,则此示例可以工作,并且呈现()方法向用户呈现他所期望的内容。
我对地图知道的不多,但是,从另一个角度来看,我会更加声明性地处理这个问题,因此,让我们假设在handleCreateNewRow()
中,我会这样做。setState({counter:this.state.counter,anotherMeta..})
然后渲染var行 = []; (让i=0; i
而不是返回未定义的的
,使用
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});
}
我看不出有任何理由使用映射
当您使用序列号作为键时,仅使用数组更有意义。
但要从映射中获取所有值,请使用其
值
方法:
{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节点之一。 问题答案: 您可以简单地在数组上 映射