javascript - 从渲染中的反应函数返回的访问变量(在循环中)
问题描述
我有一个反应类组件,我在其中传递模块名称和其他一些属性的列表。我试图通过调用函数 getModuleCode() 并将模块名称作为参数传递来获取模块代码。
class ModulesListing extends React.Component {
getModuleCode(module){
var moduleCode = 0;
// Do relevant calls and get moduleCode
return moduleCode;
}
render(){
var {modulesList} = this.props;
modulesList.forEach(module => {
//here I need to call getModuleCode as getModuleCode(module.name)
var moduleCode = getModuleCode(module.name)
console.log(moduleCode)
})
return (
//Info to display
);
}
}
如果我如上所述尝试,它会打印为未定义 也尝试设置为状态,这不适合循环。在这里,我想要的是获取某个模块的模块代码。
解决方案
如果更改,您可以获取代码,componentDidMount
并将它们存储在状态中。componentDidUpdate
modulesList
例子
function doCall() {
return new Promise(resolve =>
setTimeout(() => resolve(Math.random().toString()), 1000)
);
}
class ModulesListing extends React.Component {
state = { codes: [] };
componentDidMount() {
this.getModuleCodes();
}
componentDidUpdate(prevProps) {
if (this.props.modulesList !== prevProps.modulesList) {
this.setState({ codes: [] }, this.getModuleCodes);
}
}
getModuleCodes = () => {
Promise.all(this.props.modulesList.map(doCall)).then(codes => {
this.setState({ codes });
});
};
render() {
const { modulesList } = this.props;
const { codes } = this.state;
if (codes.length === 0) {
return null;
}
return (
<div>
{modulesList.map((module, index) => (
<div>
{module}: {codes[index]}
</div>
))}
</div>
);
}
}
ReactDOM.render(
<ModulesListing modulesList={["a", "b", "c"]} />,
document.getElementById("root")
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"></div>
推荐阅读
- r - 按列值对 R 数据框进行子集,并将与特定值匹配的单元格更改为新值
- python - 组合从 TDA-API python 库返回的多个数据帧
- windows - Windows cmd:如何连接文件名?
- git - Git Merge Branch-对其他分支的特定更改,忽略合并
- postman - 如何分享 Newman htmlextra 报告?
- f# - 如何在 F# Program.fs 中隐藏记录?
- reactjs - 在 react-router-v6 中访问元素外的 URL 参数
- bigdata - Star Schema(数据建模)是否仍然与使用 Databricks 的 Lake House 模式相关?
- python - 使用服务主体访问 Azure Blob 存储但收到错误“无法获取本地颁发者证书”
- r - R方法提取像素数据