Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将输入数据从子级传递到父级React.js_Javascript_Reactjs - Fatal编程技术网

Javascript 将输入数据从子级传递到父级React.js

Javascript 将输入数据从子级传递到父级React.js,javascript,reactjs,Javascript,Reactjs,这似乎有点基本,但我只是在学习如何使用React。目前我要做的是,当我在输入字段中键入并提交时,系统控制台会记录我的“搜索”输入。我试图做的是将我的“搜索”数据从我的子组件传递给父组件。寻找正确方向的任何提示或线索 这是我的子组件的内容: export default class SearchBar extends React.Component { constructor(props) { super(props); this.state = { search:

这似乎有点基本,但我只是在学习如何使用React。目前我要做的是,当我在输入字段中键入并提交时,系统控制台会记录我的“搜索”输入。我试图做的是将我的“搜索”数据从我的子组件传递给父组件。寻找正确方向的任何提示或线索

这是我的子组件的内容:

export default class SearchBar extends React.Component {
constructor(props) {
    super(props);
    this.state = {
        search: ''
    };
}

onChange = event => {
    this.setState({ search: event.target.value });
};

onSubmit = event => {
    const { search } = this.state;
    event.preventDefault();
    console.log(search);
};

render() {
    return (
        <div className='search-bar'>
            <form onSubmit={this.onSubmit}>
                <input
                    className='search'
                    type='text'
                    placeholder='Search'
                    onChange={this.onChange}
                    search={this.props.search}
                    value={this.state.searchinput}
                    parentCallback={this.onChange}
                ></input>
            </form>
            <FontAwesomeIcon className='search-icon' icon={faSearch} />
        </div>
    );
}
export default class Parent extends React.Component {
constructor(props) {
    super(props);
    this.state = {
        search: ''
    };
}

searchUpdate = search => {
    console.log(search);
    this.setState({ ...state, search: search })
};


render() {
    console.log(this.props.search);

    return (
        <div className='container'>
            <SearchBar passSearchData={this.searchUpdate} />
        </div>
    );
}
导出默认类搜索栏扩展React.Component{
建造师(道具){
超级(道具);
此.state={
搜索:“”
};
}
onChange=事件=>{
this.setState({search:event.target.value});
};
onSubmit=事件=>{
const{search}=this.state;
event.preventDefault();
控制台日志(搜索);
};
render(){
返回(
);
}
}

在我的父组件中(目前没有什么)

导出默认类父类扩展React.Component{
建造师(道具){
超级(道具);
此.state={
搜索:“”
};
}
搜索更新=搜索=>{
控制台日志(搜索);
};
render(){
console.log(this.props.search);
返回(
);
}

}最简单的方法是将函数从父级传递到子级:

//在父组件中
const setSearchValue=(搜索)=>{
//设置要搜索的状态
this.setState({search});
}
渲染(){
返回
}
//子组件中的
//更改您的搜索更新
搜索更新=()=>{
const{onsearch}=this.state;
//将数据传递给父级的函数调用
this.props.onsearch(onsearch)
}

只需将一个函数作为道具传递给子组件即可。让子组件执行句柄更改部分,并将值传递回父组件,然后使用该值执行任何您想要的操作

代码沙盒:

父母亲
从“React”导入React;
从“/Search”导入搜索;
导出默认类父级扩展React.Component{
搜索更新=搜索=>{
console.log(“在父项中”,搜索);
};
render(){
console.log(this.props.search);
返回(
);
}
}
小孩
从“React”导入React;
导出默认类搜索扩展React.Component{
建造师(道具){
超级(道具);
此.state={
搜索:“
};
}
onChange=事件=>{
this.setState({search:event.target.value},()=>{
log(“in child”,this.state.search);
this.props.handleSearch(this.state.search);
});
};
onSubmit=事件=>{
const{search}=this.state;
event.preventDefault();
控制台日志(搜索);
};
render(){
返回(
);
}
}

通常,要将数据从子组件传递到父组件,可以将函数的引用作为道具从父组件传递到子组件,并使用数据从子组件调用传递的函数

您可以这样做:

export default class SearchBar extends React.Component {
constructor(props) {
    super(props);
    this.state = {
        search: ''
    };
}

onChange = event => {
    this.setState({ search: event.target.value });
};

onSubmit = event => {
    const { search } = this.state;
    event.preventDefault();
    console.log(search);
    this.props.passSearchData(search);
};

render() {
    return (
        <div className='search-bar'>
            <form onSubmit={this.onSubmit}>
                <input
                    className='search'
                    type='text'
                    placeholder='Search'
                    onChange={this.onChange}
                    search={this.props.search}
                    value={this.state.searchinput}
                    parentCallback={this.onChange}
                ></input>
            </form>
            <FontAwesomeIcon className='search-icon' icon={faSearch} />
        </div>
    );
}
导出默认类搜索栏扩展React.Component{
建造师(道具){
超级(道具);
此.state={
搜索:“”
};
}
onChange=事件=>{
this.setState({search:event.target.value});
};
onSubmit=事件=>{
const{search}=this.state;
event.preventDefault();
控制台日志(搜索);
this.props.passSearchData(搜索);
};
render(){
返回(
);
}
在父组件中:

export default class SearchBar extends React.Component {
constructor(props) {
    super(props);
    this.state = {
        search: ''
    };
}

onChange = event => {
    this.setState({ search: event.target.value });
};

onSubmit = event => {
    const { search } = this.state;
    event.preventDefault();
    console.log(search);
};

render() {
    return (
        <div className='search-bar'>
            <form onSubmit={this.onSubmit}>
                <input
                    className='search'
                    type='text'
                    placeholder='Search'
                    onChange={this.onChange}
                    search={this.props.search}
                    value={this.state.searchinput}
                    parentCallback={this.onChange}
                ></input>
            </form>
            <FontAwesomeIcon className='search-icon' icon={faSearch} />
        </div>
    );
}
export default class Parent extends React.Component {
constructor(props) {
    super(props);
    this.state = {
        search: ''
    };
}

searchUpdate = search => {
    console.log(search);
    this.setState({ ...state, search: search })
};


render() {
    console.log(this.props.search);

    return (
        <div className='container'>
            <SearchBar passSearchData={this.searchUpdate} />
        </div>
    );
}
导出默认类父类扩展React.Component{
建造师(道具){
超级(道具);
此.state={
搜索:“”
};
}
搜索更新=搜索=>{
控制台日志(搜索);
this.setState({…state,search:search})
};
render(){
console.log(this.props.search);
返回(
);
}

您不能将数据从子组件传递到父组件,只需将输入数据保存在父组件中,并将父组件传递到子组件。Micheal您只能将道具从父组件传递到子组件。然后如何访问子组件值。只需将onChange=event=>…从子组件移动到父组件,并将其作为p传递rop到儿童组件。快乐学习!
export default class Parent extends React.Component {
constructor(props) {
    super(props);
    this.state = {
        search: ''
    };
}

searchUpdate = search => {
    console.log(search);
    this.setState({ ...state, search: search })
};


render() {
    console.log(this.props.search);

    return (
        <div className='container'>
            <SearchBar passSearchData={this.searchUpdate} />
        </div>
    );
}