'.onChange' 方法无法获取 React.js 中 'Input' 的最新信息
The '.onChange' method doesn't get the newest info of 'Input' in React.js
import reqwest from './public/reqwest.js'
const PAGE_SIZE = 10
class App extends Component {
constructor() {
super()
this.state = {
page: 1,
arr: []
}
}
singleInfo(page) {
reqwest({
url: 'https://cnodejs.org/api/v1/topics',
data: {
limit: PAGE_SIZE,
page: this.state.page
},
success: function (data) {
this.setState({
arr: data.data
})
}.bind(this)
})
}
changeState(newState) {
this.setState(newState)
this.singleInfo(newState.page)
}
render() {
return (
<div>
<Menu val={this.state.page} changeParentState={(state) => this.changeState(state)} />
<List arr={this.state.arr} />
</div>
);
}
}
class Menu extends Component {
handleChange(event) {
if(event.target.value) {
this.props.changeParentState({
page: event.target.value
})
}
}
render() {
console.log(this)
return <input type="text" defaultValue={this.props.val} onChange={(event) => this.handleChange(event)} />
}
}
class List extends Component {
render() {
return <ul>
{
this.props.arr.map((ele) => {
return (
<li key={ ele.id }>
<p className="title">{ ele.title }</p>
<p className="date">{ ele.create_at }</p>
<p className="author">{ ele.author.loginname }</p>
</li>
)
})
}
</ul>
}
}
我无法通过 onChange
在 Menu module
中获取 input
的当前值。
在我的代码中,应用程序有两个子组件 - List
和 Menu
。
你可以在 Menu
组件中输入页面,所以它会发送 Ajax() 来获取页面的信息。但事实是:在我将输入值更改为 1 -> 10 后,ajax 得到 1.
的值
在此之前,我知道keyup
或keydown
和keypress
之间的区别。他们有跨浏览器的区别。但我只是 想通过 React.js.
获取输入的当前值
首先,改变:
<input type="text" defaultValue={this.props.val} onChange={(event) => this.handleChange(event)} />
收件人:
<input type="text" value={this.props.val} onChange={(event) => this.handleChange(event)} />
以便您的输入在重新渲染时更新为正确的值。
其次,请记住 setState
通常是异步的。所以不要指望调用 setState
.
后状态会立即改变
您的 changeState
方法在这方面很好,因为它将 newState
传递给了 singlePageRequest
。但是 singlePageRequest
不使用提供的值,而是使用 this.state.page
。将其更改为使用提供的值,您应该没问题:
singleInfo(page) {
reqwest({
url: 'https://cnodejs.org/api/v1/topics',
data: {
limit: PAGE_SIZE,
page: page
},
success: function (data) {
this.setState({
arr: data.data
})
}.bind(this)
})
}
import reqwest from './public/reqwest.js'
const PAGE_SIZE = 10
class App extends Component {
constructor() {
super()
this.state = {
page: 1,
arr: []
}
}
singleInfo(page) {
reqwest({
url: 'https://cnodejs.org/api/v1/topics',
data: {
limit: PAGE_SIZE,
page: this.state.page
},
success: function (data) {
this.setState({
arr: data.data
})
}.bind(this)
})
}
changeState(newState) {
this.setState(newState)
this.singleInfo(newState.page)
}
render() {
return (
<div>
<Menu val={this.state.page} changeParentState={(state) => this.changeState(state)} />
<List arr={this.state.arr} />
</div>
);
}
}
class Menu extends Component {
handleChange(event) {
if(event.target.value) {
this.props.changeParentState({
page: event.target.value
})
}
}
render() {
console.log(this)
return <input type="text" defaultValue={this.props.val} onChange={(event) => this.handleChange(event)} />
}
}
class List extends Component {
render() {
return <ul>
{
this.props.arr.map((ele) => {
return (
<li key={ ele.id }>
<p className="title">{ ele.title }</p>
<p className="date">{ ele.create_at }</p>
<p className="author">{ ele.author.loginname }</p>
</li>
)
})
}
</ul>
}
}
我无法通过 onChange
在 Menu module
中获取 input
的当前值。
在我的代码中,应用程序有两个子组件 - List
和 Menu
。
你可以在 Menu
组件中输入页面,所以它会发送 Ajax() 来获取页面的信息。但事实是:在我将输入值更改为 1 -> 10 后,ajax 得到 1.
在此之前,我知道keyup
或keydown
和keypress
之间的区别。他们有跨浏览器的区别。但我只是 想通过 React.js.
首先,改变:
<input type="text" defaultValue={this.props.val} onChange={(event) => this.handleChange(event)} />
收件人:
<input type="text" value={this.props.val} onChange={(event) => this.handleChange(event)} />
以便您的输入在重新渲染时更新为正确的值。
其次,请记住 setState
通常是异步的。所以不要指望调用 setState
.
您的 changeState
方法在这方面很好,因为它将 newState
传递给了 singlePageRequest
。但是 singlePageRequest
不使用提供的值,而是使用 this.state.page
。将其更改为使用提供的值,您应该没问题:
singleInfo(page) {
reqwest({
url: 'https://cnodejs.org/api/v1/topics',
data: {
limit: PAGE_SIZE,
page: page
},
success: function (data) {
this.setState({
arr: data.data
})
}.bind(this)
})
}