我是新来的反应,我又被卡住了。我试图映射我的数组,以在我的子组件中创建新的对象数组。这是我的问题——我的方法组件迪迪蒙特在数据来自父母道具之前被执行,我的状态保持为空。当我console.logingthis.props和组件的末尾,我收到空数组,但当我console.loging渲染方法它给我4个空数组,然后它填充到预期的300。我做错了什么?
父组件:
import "./App.css";
import { CompanyList } from "./components/companylist/companylist.component";
import { Searchfield } from "./components/searchfield/searchfield.component";
class App extends Component {
constructor(props) {
super(props);
this.state = {
companies: [],
searchfield: "",
};
}
componentDidMount = () => {
const URL = "https://xxxxx/companies";
fetch(URL)
.then((response) => response.json())
.then((data) => this.setState({ companies: data }))
.catch((error) => {
console.error("Error", error);
});
};
render() {
const filteredCompanies = this.state.companies.filter((item) =>
item.name.toLowerCase().includes(this.state.searchfield.toLowerCase())
);
return (
<div>
<Searchfield
handleChange={(e) => this.setState({ searchfield: e.target.value })}
/>
<CompanyList companies={filteredCompanies} />
</div>
);
}
}
export default App;
儿童部分:
import React, { Component } from "react";
import { Company } from "../company/company.component";
export class CompanyList extends Component {
constructor(props) {
super(props);
this.state = {
newArray: [],
};
}
componentDidMount = () => {
const filledArray = this.props.companies.map((item) => {
let result;
fetch(`https://xxxxx/incomes/${item.id}`)
.then((response) => response.json())
.then((data) => {
let transactionsToFloat = data.incomes.map((item) =>
parseFloat(item.value)
);
result = transactionsToFloat.reduce((acc, num) => {
return acc + num;
}, 0);
result = Math.round(result * 100) / 100;
});
return {
id: item.id,
name: item.name,
city: item.city,
totalIncome: result,
};
});
this.setState({ newArray: filledArray });
console.log(this.props);
};
render() {
console.log(this.props);
return (
<div>
<table>
<thead>
<tr>
<th> Id </th>
<th> Name </th>
<th> City </th>
<th> Total income </th>
</tr>
</thead>
{this.props.companies.map((item) => (
<Company key={item.id} company={item} />
))}
</table>
</div>
);
}
}
componentWillMount()发生在render()之前。componentDidMount()在之后发生。
这是因为React从根本上是如何工作的。React应该让人感觉快速、流畅、敏捷。应用程序不应使用http请求或异步代码登录。答案是使用生命周期方法来控制DOM。
当组件挂载时意味着什么?
更好地理解一些React词汇可能会有所帮助。当一个组件被装入时,它被插入到DOM中。这是调用构造函数的时候。componentWillMount几乎与构造函数同义,并且几乎同时被调用。componentDidMount仅在第一次渲染后调用一次。
组件将安装--
我试图使用在child中的函数中生成的值。js并将其传递给父级。所以我可以使用这个值来过滤子数组。 小孩js 是生成的值,我需要在父级中访问该值。js Parent.js 我是不是错过了一些显而易见的东西?控制台。日志for返回子项的所有值。js节点,但当用作道具时返回未定义。 如何让函数运行,这样我就可以用返回的值过滤结果? 谢谢
我不知道是否有问题,但我想知道为什么溢出:hidden在固定的父/子元素上不起作用。 举个例子: CSS和HTML: 现场演示:jsFiddle
我试图将一个参数从父组件传递给子组件的ComponentDidMount()方法。我只能在子组件的render()中接收道具,而无法将其传递给ComponentDidMount()方法。 父组件-提供程序。js 子组件-AddCarePlan。js
我有一个和道具同名的守望者。道具是在某个事件的父组件中动态设置的。我需要一些东西,每次在父组件上触发事件时,都会用属性值触发子组件中的某个函数,即使它设置的属性相同。是否有任何观察者选项或其他处理此类案件的方法允许我这样做? 我尝试了什么(这是在组件中): 仅在newVal与oldVal不同时打印,我需要一些函数来触发,即使它们相同。父组件如下所示: 这些是父数据和方法:
问题内容: 我建立了一个新的react项目,由于某种原因,该方法没有被调用。 我已经通过调用in 验证了此行为,但是在控制台中看不到它的输出。 此外,无法正常工作。 关于为什么不调用,我感到很困惑。我尝试同时使用React“ v0.14.0”和“ v0.14.3”。 为什么不调用“ componentDidMount”? 码: 问题答案: 所以…瞧瞧......我终于开始工作了(在后端专家的帮助下
当产品(和子产品)类别页面和商店页面中的条件标记(是产品类别)同时出现时,我无法应用下面的代码。 希望有人能帮忙。 我的目标:每个产品类别页面(包括家长) 参考代码片段和代码片段