【发布时间】:2018-08-01 21:17:06
【问题描述】:
我试图简单地映射从 api 返回的一些数据,并为每个返回的对象创建一个无状态组件。我希望能够单击任何组件来切换其其余数据的可见性。
我已经尝试了很多方法来做到这一点并一直碰壁,我也搜索过堆栈溢出,但似乎找不到答案。
我通过使它们成为单独的类组件来使其工作,但是对于切换功能来说似乎有很多不必要的代码。
提前感谢您的任何帮助或见解,这里是我目前所拥有的快速细分。
为了澄清,这是一个简单的应用程序,让我了解如何使用 react 和外部 api,它不使用 redux。
获取处于类组件状态的用户
class PersonList extends Component {
constructor(props) {
super(props);
this.state = {
resource: []
};
}
async componentDidMount() {
let fetchedData = await API_Call("people");
this.setState({ resource: fetchedData.results });
while (fetchedData.next) {
let req = await fetch(fetchedData.next);
fetchedData = await req.json();
this.setState({
resource: [...this.state.resource, ...fetchedData.results]
});
}
}
}
然后映射结果并为每个结果渲染一个组件
render() {
const mappedPeople = this.state.resource.map((person, i) => (
<Person key={i} {...person} />
));
return <div>{mappedPeople}</div>;
}
我是否可以让每个人组件成为无状态组件,并且能够单击它并显示其余数据?这是我目前拥有的。
class Person extends Component {
constructor(props) {
super(props);
this.state = {
visibility: false
};
}
toggleVisible = () => {
this.setState(prevState => ({
visibility: !prevState.visibility
}));
};
render() {
return (
<div>
<h1 onClick={this.toggleVisible}>{this.props.name}</h1>
{this.state.visibility && (
<div>
<p>{this.props.height}</p>
</div>
)}
</div>
);
}
}
再次提前感谢您提供任何见解或帮助!
【问题讨论】:
-
让我明白。您发布的这段代码可以按照您想要的方式运行,但您想将其重构为无状态组件?
-
正确!对于如此简单的功能,似乎没有必要渲染 100 个带有状态的单独类组件。
标签: javascript reactjs