如何使用输入的 onChange 方法更新 class-base 组件的 render()
How to update render() of a class-base component using onChange method of an input
我已经将这些写入要搜索 JSON 文件的组件。
第一个组件由两部分组成,1-it returns 表示 JSX 的元素和 2-it 通过 JSON 文件找到匹配项并将数据填充到 Const 并将其传递给另一个组件的 props创建以显示结果。
问题是组件的 render() 方法没有重新加载新输入的数据,而变量正常工作,数据从第一个组件传递到第二个组件没有任何问题。
import react from 'react';
import React, { Component } from 'react';
import './index.css';
import ResultP from './ResultP';
import userData from './userData';
class SearchP extends Component {
constructor(props){
super(props);
this.state = {
SearchValue : "",
MatchingItems : []
}
}
handleChange = (word)=> {
const match = word.target.value;
const Matches = userData.filter((users) => {return users.name.includes(match);});
this.setState({MatchingItems : Matches})
console.log(this.state.MatchingItems);
};
render() {
return (
<div>
<form className="my-form" >
<input type="search" onChange={this.handleChange}
placeholder="Write your keyword here" />
</form>
<ResultP SearchString = {this.state.MatchingItems} />
</div>
)
}
}
export default SearchP;
这是第一个组件。
下面是第二个
import React, { Component } from 'react';
class ResultP extends Component {
constructor(props){
super (props);
this.state = {
SearchString : this.props.SearchString,
}
}
render() {
return (
<section className="main-section">
{this.state.SearchString}
</section>
)
}
}
export default ResultP;
构造函数逻辑仅在组件最初呈现时执行一次,因此当您在构造函数中使用 prop 值初始化状态变量时,如果 prop 值发生变化,该状态变量将不会更新。您需要在子组件中添加 getDerivedStateFromProps
函数:https://reactjs.org/docs/react-component.html#static-getderivedstatefromprops. Here's an example: https://www.tutorialspoint.com/reactjs-getderivedstatefromprops-method
我已经将这些写入要搜索 JSON 文件的组件。 第一个组件由两部分组成,1-it returns 表示 JSX 的元素和 2-it 通过 JSON 文件找到匹配项并将数据填充到 Const 并将其传递给另一个组件的 props创建以显示结果。 问题是组件的 render() 方法没有重新加载新输入的数据,而变量正常工作,数据从第一个组件传递到第二个组件没有任何问题。
import react from 'react';
import React, { Component } from 'react';
import './index.css';
import ResultP from './ResultP';
import userData from './userData';
class SearchP extends Component {
constructor(props){
super(props);
this.state = {
SearchValue : "",
MatchingItems : []
}
}
handleChange = (word)=> {
const match = word.target.value;
const Matches = userData.filter((users) => {return users.name.includes(match);});
this.setState({MatchingItems : Matches})
console.log(this.state.MatchingItems);
};
render() {
return (
<div>
<form className="my-form" >
<input type="search" onChange={this.handleChange}
placeholder="Write your keyword here" />
</form>
<ResultP SearchString = {this.state.MatchingItems} />
</div>
)
}
}
export default SearchP;
这是第一个组件。 下面是第二个
import React, { Component } from 'react';
class ResultP extends Component {
constructor(props){
super (props);
this.state = {
SearchString : this.props.SearchString,
}
}
render() {
return (
<section className="main-section">
{this.state.SearchString}
</section>
)
}
}
export default ResultP;
构造函数逻辑仅在组件最初呈现时执行一次,因此当您在构造函数中使用 prop 值初始化状态变量时,如果 prop 值发生变化,该状态变量将不会更新。您需要在子组件中添加 getDerivedStateFromProps
函数:https://reactjs.org/docs/react-component.html#static-getderivedstatefromprops. Here's an example: https://www.tutorialspoint.com/reactjs-getderivedstatefromprops-method