マイreactjsの世論調査では、現在、このコードがあるreactjsで小道具に基づいて定義する方法:動的this.state
//App.js
import React, { Component } from 'react';
import './App.css';
const PollOption = ({options,selected, onChange}) => {
return (
<div className="pollOption">
{options.map((choice, index) => (
<label key={index}>
<input type="radio"
name="vote"
value={choice.value}
key={index}
checked={selected === choice.value}
onChange={onChange}/>
{choice.text}
</label>
))}
</div>
);
};
const VoteCount = ({totalVotes, choiceOneVotes, choiceTwoVotes}) =>{
return(
<div className="VoteCount">
<h2>Total Votes {totalVotes}</h2>
<ul>
<li>Yes: {choiceOneVotes}</li>
<li>No: {choiceTwoVotes}</li>
</ul>
</div>
);
}
class OpinionPoll extends Component{
constructor(props) {
super(props);
this.state = {selectedOption: '',
totalVotes: 0,
choiceOneVotes: 0,
choiceTwoVotes: 0}
}
handleClick(){
console.log('submitted option', this.state.selectedOption);
this.setState(prevState => {
return {totalVotes: prevState.totalVotes + 1}
})
if(this.state.selectedOption === "yes"){
this.setState(prevState => {
return {choiceOneVotes: prevState.choiceOneVotes + 1}
})
}else{
this.setState(prevState => {
return {choiceTwoVotes: prevState.choiceTwoVotes + 1}
})
}
}
handleOnChange(e){
console.log('selected option', e.target.name);
this.setState({ selectedOption: e.target.value});
}
render(){
return (
<div className="poll">
{this.props.model.question}
<PollOption
options={this.props.model.choices}
onChange={(e) => this.handleOnChange(e)}
selected={this.state.selectedOption}/>
<button onClick={() => this.handleClick()}>Vote!</button>
<VoteCount
totalVotes={this.state.totalVotes}
choiceOneVotes={this.state.choiceOneVotes}
choiceTwoVotes={this.state.choiceTwoVotes}/>
</div>
);
}
}
export default OpinionPoll;
//index.js
import React from 'react';
import {render} from 'react-dom';
import './index.css';
import OpinionPoll from './App';
var json = {
question: 'Do you support cookies in cakes?',
choices:
[
{text: "Yes", value: "yes"},
{text: "No", value: "no"}
]
}
const root = document.getElementById("root");
render(<OpinionPoll model ={json} />, root)
マイhandleClick()とVoteCountコンポーネントのコードを私は選択肢の数を追加した場合ので、無粋な感じ私は行って、状態オブジェクトを変更し、別のsetState呼び出しを追加する必要があります。どのように私はこの動的にすることができますか?
を追加することができます。この方法は? – jwesonga
いいえ..実際には、 'chooseOneVotes'または 'choiceTwoVotes'のいずれかを 'choose'オブジェクトの状態名として 'yes'または 'no'のいずれかのクリックに基づいて使用します。plsはコードを試します –