【发布时间】:2020-07-27 04:06:16
【问题描述】:
我是 React 新手,我很难想出代码来让我的按钮执行我想要的操作。我希望他们循环遍历给定的数组并每次显示不同的信息。我尝试了 for loop 和 forEach 方法,并尝试将项目添加到自身,但似乎没有任何效果。我试图阅读有关 React 的文档,但它什么也没给我。我不知道在 React 中是否有特定的方法可以做到这一点,有人可以指出正确的方向吗?
这是我的代码:
class Members extends React.Component {
constructor(props) {
super(props);
this.state = {
userInput: null,
senators: [],
represenatives: [],
bills: [],
}
}
handleChange = (e) => {
this.setState({
userInput: e.target.value.toUpperCase()
})
}
right = (i) => {
i.forEach(element => {
element = element++
console.log(element)
});
}
left = (i) => {
console.log(i.id)
}
componentDidMount() {
const key = `xCaHBd8gI5ZJSOUXWFJGOXZBjJtMbvoIcip0kSmS`
const urls = [`https://api.propublica.org/congress/v1/116/senate/members.json`,
`https://api.propublica.org/congress/v1/102/house/members.json`,
`https://api.propublica.org/congress/v1/statements/latest.json`,
`https://api.propublica.org/congress/v1/bills/search.json`];
let requests = urls.map(url => fetch(url, {
type: "GET",
dataType: 'json',
headers: {
'X-API-Key': key
}
}))
Promise.all(requests)
.then(res => {
return Promise.all(res.map(res => res.json()));
}).then(response => {
this.setState({
senators: response[0].results[0].members,
represenatives: response[1].results[0].members,
bills: response[2].results
})
}).catch(err => {
console.log(err)
})
}
render() {
const { senators, bills, represenatives, userInput } = this.state;
const inSenate = senators.filter(
(senator) => senator.state === userInput
)
const inHouse = represenatives.filter(
(represenative) => represenative.state === userInput
)
const draft = bills.find(
(bill) => bill.name === inSenate.last_name)
return (
<div className="congress">
<div className="users">
<h2>{this.state.userInput}</h2>
<input className="userInput" onChange={this.handleChange} />
</div>
{inSenate.map((senate, i) => {
return (
<div key={senate.id} className="senate">
<h2 className="senateName">Senate</h2>
<ul className="bio">
<h2 >{senate.short_title + " " + senate.first_name + " " + senate.last_name}</h2>
<li>{senate.title}</li>
<li>State: <strong>{senate.state}</strong></li>
<li>Party: <strong>{senate.party}</strong></li>
<li>DOB: <strong>{senate.date_of_birth}</strong></li>
<li>Next Election: <strong>{senate.next_election}</strong></li>
<li>Missed Votes: <strong>{senate.missed_votes}</strong></li>
<li> Votes With Party Percentage: <strong>{senate.votes_with_party_pct + "%"}</strong></li>
<li>Votes Against Party Percentage: <strong>{senate.votes_against_party_pct + "%"}</strong></li>
</ul>
</div>
)
})}
{inHouse.map((rep, i) => {
return (
<div key={rep.id} className="house">
<h2 className="numbers" >Your state has {inHouse.length} Represenative(s)</h2>
<h2 >{rep.short_title + " " + rep.first_name + " " + rep.last_name}</h2>
<ul className="bio">
<li >{rep.title}</li>
<li >State: <strong>{rep.state}</strong></li>
<li >Party: <strong>{rep.party}</strong></li>
<li >DOB: <strong>{rep.date_of_birth}</strong></li>
<li >Next Election: <strong>{rep.next_election}</strong></li>
<li >Missed Votes: <strong>{rep.missed_votes}</strong></li>
<li > Votes With Party Percentage: <strong>{rep.votes_with_party_pct + "%"}</strong></li>
<li >Votes Against Party Percentage: <strong>{rep.votes_against_party_pct + "%"}</strong></li>
</ul>
<button onClick={() => this.left(inHouse)} className="left btn"></button>
<button onClick={() => this.right(inHouse)} className="right btn"></button>
</div>
)
})}
</div>
)
}
}
【问题讨论】:
-
请提供更多细节。你到底想发生什么。内部地图在渲染时显示所有代表。
标签: javascript reactjs button