0
在我的父组件中我有一个表单,我需要将该表单的输入传递给子组件,我需要将它附加到API。我一直在试图做这样:将子组件中的道具添加到API
`https://api.icndb.com/jokes/random?=firstName${this.props.name}`
,但我不断收到此错误:jQuery.Deferred例外:this.state.jokes.map不是一个函数类型错误:此.state.jokes.map不是函数
当我不向API添加道具时,map函数可以工作。
全部代码在这里:
家长:
class Input extends Component {
constructor(props){
super(props)
this.state = {
value: ' ',
selected: false
}
this.handleSubmit = this.handleSubmit.bind(this);
this.handleChange = this.handleChange.bind(this);
}
handleChange(event) {
this.setState(
{value: event.target.value}
);
}
handleSubmit(event) {
this.setState(
{selected: true}
)
}
render() {
return (
<div>
<img src="http://vignette3.wikia.nocookie.net/mugen/images/b/b6/Chuck-norris.png/revision/latest?cb=20120615045306" alt="chuck"/>
<form>
<h1>Whats your name?</h1>
<input type="text" value={this.state.value} onChange={this.handleChange}/>
</form>
<Button onClick={this.handleSubmit} id="submit">
<Link to="/jokes">Submit</Link>
</Button>
{this.state.selected === true
?
<Jokes name={this.state.value} />
:
null
}
</div>
)
}
}
孩子:
class Jokes extends Component {
constructor(props){
super(props);
this.state = {jokes: []}
this.JokeList = this.JokeList.bind(this)
}
componentDidMount() {
this.JokeList()
}
JokeList() {
return $.getJSON(`https://api.icndb.com/jokes`)
.then((data) =>{
this.setState({ jokes: data.value })
console.log(this.state.jokes)
});
}
render(){
const funnies = this.state.jokes.map((item, i) => {
return <div id="quoteList">
<h1 id="num" className="answers" key="id">{item.id}</h1>
<h2 id="quote" className="answers" key="yoke">{item.joke}</h2>
</div>
})
return(
<div> { funnies } </div>
)
}
}
任何帮助非常感谢!
我不知道你想在这里做什么?你可以通过从母公司任何道具尽管如此,你可以在任何地方访问它们。 – paqash
@paqash我把它改写成对我的问题更具体 – melr
你可以在调用'this.setState({jokes:data.value})之前检查'data.value'' – paqash