【发布时间】:2020-07-10 16:21:23
【问题描述】:
类组件的内部琐事 我有一个currentQuestion 状态变量,它充当索引。我创建了另一个类组件 Questions,它将从 JSON 文件中读取,我想将它传递给 Trivia,如下所示:
...
questions = <Questions index="{currentQuestion}"/>
return (
<div>
<div>{finished ? "You are done" : questions.question }</div>
...
并且每次在上面设置状态currentQuestion 时更新每个问题。问题是对象数组或索引对于我尝试的所有内容都未定义。
如何将此数组传递给父组件,以便它可以接收 currentQuestion 状态并相应地更新正确的问题?
我试过的代码:
import React from "react";
import "./styles.css";
import Questionsfile from "./Questionsfile.json";
export default function App() {
return (
<div className="App">
<h1>Hello Trivia about Elisa</h1>
<Trivia name="Elisa" />
</div>
);
}
export class Trivia extends React.Component {
constructor(props) {
super(props);
this.handleNextClick = this.handleNextClick.bind(this);
this.handleBackClick = this.handleBackClick.bind(this);
this.state = {
isFinished: false,
currentQuestion: 0
};
}
handleNextClick() {
this.setState({
isFinished: this.state.currentQuestion === 2 ? true : false,
currentQuestion: this.state.currentQuestion + 1
});
}
handleBackClick() {
this.setState({
currentQuestion: this.state.currentQuestion - 1
});
}
render() {
const finished = this.state.isFinished; // I have to use this
const currentQuestion = this.state.currentQuestion;
let buttonNext;
let buttonBack;
let questions;
if (currentQuestion < 3) {
buttonNext = (
<NextClickButton
name={currentQuestion === 2 ? "Submit" : "Next"}
onClick={this.handleNextClick}
/>
);
}
if (currentQuestion > 0 && !finished) {
buttonBack = <BackClickButton onClick={this.handleBackClick} />;
}
// The problem starts here
questions = <Questions index="{currentQuestion}"/>
return (
<div>
<div>{finished ? "You are done" : questions.question }</div>
{buttonBack}
{buttonNext}
</div>
);
}
}
function NextClickButton(props) {
return <button onClick={props.onClick}>{props.name}</button>;
}
function BackClickButton(props) {
return <button onClick={props.onClick}>Back</button>;
}
export class Questions extends React.Component {
render() {
return <div>{Questionsfile.questions[this.props.index]}</div>;
}
}
【问题讨论】:
标签: javascript reactjs