【发布时间】:2018-11-16 10:04:12
【问题描述】:
我使用 ReactJS 创建了一个简单的应用程序。这个应用程序是配置文件列表,为简单起见,在显示配置文件时我只显示名称。 我添加了按钮来显示上一个和下一个配置文件,但我以非常简单的方式在主组件内部进行了操作。
我的问题:
- 如何将此按钮与单独的组件分开
- 如何改进这些按钮的“切换”功能
// my profiles.json
let profiles = [{"name":"John"}, {"name":"Kitty"}, {"name":"Ji"}, {"name":"Mattis"}]
class Profile extends React.Component {
render() {
return (
<div>
<h1>{this.props.name}</h1>
</div>
)
}
}
class Main extends React.Component {
constructor(props) {
super(props)
this.state = {
index: 1,
disabledNext: false,
disabledPrev: false
}
}
togglePrev(e) {
let index = this.state.index - 1
let disabledPrev = false
if (index <= 0) {
e.preventDefault()
index = 0
disabledPrev = true
}
this.setState({ index: index, disabledPrev: disabledPrev, disabledNext: false })
}
toggleNext(e) {
let index = this.state.index + 1
let disabledNext = false
if (index === this.props.profiles.length - 1) {
e.preventDefault()
index = this.props.profiles.length - 1
disabledNext = true
}
this.setState({ index: index, disabledNext: disabledNext, disabledPrev: false })
}
render() {
const { index, disabledNext, disabledPrev } = this.state
const profile = this.props.profiles ? this.props.profiles[index] : null
if (profile) {
return (
<div className='profile'>
<div>
<button onClick={this.togglePrev.bind(this)} disabled={disabledPrev}>Prev</button>
<button onClick={this.toggleNext.bind(this)} disabled={disabledNext}>Next</button>
</div>
<Profile {...profile} />
</div>
)
} else {
return <span>error</span>
}
}
}
const App = () => (
<div>
<Main profiles={profiles} />
</div>
)
ReactDOM.render(
<App />,
document.getElementById('root')
)
<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<div id="root"></div>
【问题讨论】:
-
嗨 Herasimenak,所以基本上你只想在 React Class 组件中调整你的上一个/下一个按钮?
-
基本上我认为你现在感兴趣的主题有两个,Lifting State Up 概念和 Refs 元素,都来自 Reactjs 核心库。这都是关于数据流的,所以我让你潜入河中。稍后当您构建更复杂的应用程序时,redux 将满足您的需求。祝你好运。