我有两个组件:
下面的代码是一个更大问题的简化,这就是为什么你会看到一些需要满足的要求。 我的问题是 我需要在函数
以下是可以进行实验的 代码沙盒(请提供使用您的方法的分支): https://codesandbox.io/s/wqw49j5krw 以下是代码: ParentComponent.js
有没有想法让它运行起来?感谢!
ParentComponent
和 ChildComponent
。
ChildComponent
有一个 input[type="text"]
元素,当它改变文本时,该事件通过事件 change
和 onChange
监听器传播到 ParentComponent
。下面的代码是一个更大问题的简化,这就是为什么你会看到一些需要满足的要求。 我的问题是 我需要在函数
handleClick
内触发 change
事件。我进行了一些实验,但没有成功。以下是可以进行实验的 代码沙盒(请提供使用您的方法的分支): https://codesandbox.io/s/wqw49j5krw 以下是代码: ParentComponent.js
import React from "react";
import ChildComponent from "./ChildComponent";
export default class ParentComponent extends React.Component {
constructor(props) {
super(props);
this.state = {
name: "Peter"
};
}
handleChange = event => {
let target = event.target;
let value = target.value;
this.setState({
name: value
});
};
render() {
return (
<div>
<ChildComponent value={this.state.name} onChange={this.handleChange} /><br />
<span>Hello</span>
<span>{this.state.name}!</span>
</div>
);
}
}
ChildComponent.js
import React from "react";
import ReactDOM from "react-dom";
export default class ChildComponent extends React.Component {
constructor(props) {
super(props);
this.state = {
value: this.props.value
};
}
handleChange = event => {
const name = event.target.value;
this.setState({ value: name });
if (this.props.onChange !== undefined) {
this.props.onChange(event);
}
};
handleClick = name => {
const inputName = this.refs.name;
console.log('Name before being changed: ' + inputName.value); // this works
// PROBABLY HERE IS WHERE THE CODE NEEDS TO BE MODIFIED
this.setState({ value: name });
var event = new Event('input', { bubbles: true });
inputName.dispatchEvent(event); // this doesn't propagate the event to the parent
};
render() {
return (
<div>
{"Your name: "}
<input type="text"
value={this.state.value}
onChange={this.handleChange}
ref="name"
/>
{/* requirement: the following 2 lines cannot be modified */}
<button onClick={e => { this.handleClick("Steve"); }}>Steve</button>
<button onClick={e => { this.handleClick("Emily"); }}>Emily</button>
</div>
);
}
}
有没有想法让它运行起来?感谢!
event.target
,而实际上您可以直接使用该值。您可以仅传递该值到函数中,这样它就可以在任何地方被调用,而无需传递事件,只需要传递该值。在您的情况下,这种方法可行吗? - Surya Purohit