即使从父组件传递函数后也无法从子组件更改状态

Posted

技术标签:

【中文标题】即使从父组件传递函数后也无法从子组件更改状态【英文标题】:Can't change State from child component even after passing a function from parent component 【发布时间】:2020-05-29 12:05:16 【问题描述】:

目前正在制作一个一开始有欢迎屏幕的待办应用,但是当点击按钮进入时,它会将欢迎状态从真设置为假。触发实际的待办事项列表组件。

由于某种原因,即使在将函数传递给 WelcomePage 之后,当我按下 enter 时,React 仍然不会渲染到其他组件。

谢谢,

function Router(props) 
    if (props.welcome) 
        return <WelcomePage onEnter=props.onEnter/> //if home is true, there will be home page rendered
     else  
        return <ToDoPage/> //if home is false, that means you've entered
    



class ToDo extends React.Component 
    constructor(props) 
        super(props);
        this.state = welcome: true;
        this.onEnter = this.onEnter.bind(this);
    

    onEnter(e) 
        this.setState(welcome: false);
    

    render() 
        return (
                <div className="ToDo">
                    <Router welcome=this.state.welcome onEnter=this.onEnter/>
                </div>
            )
    

class WelcomePage extends React.Component 
    constructor(props) 
        super(props);
    

    render() 
        return (
            <div id="home">
                <h1> Welcome</h1>
                <h2> Who does this list beong to? </h2>
                <input placeholder="your name"/>
                <input type="button" value="enter" onSubmit=this.props.onEnter/>
            </div>
            )
    

【问题讨论】:

无法识别是什么意思?是否有特定的错误,比如不能调用 null 的方法之类的? 我不确定,我认为它没有注册该功能。当我按下回车键时,我无法让它更改组件。 您能解释一下为什么您要尝试向按钮添加提交事件处理程序吗?你说的是onClick吗?还是您的意思是制作一个表单并处理表单的提交? @AlexanderStaroselsky 哦,你解决了,我在那里犯了一个错误。 【参考方案1】:

尝试将onSubmit 更改为onClick,因为input:button 不会发出submit 事件:

class WelcomePage extends React.Component 
    constructor(props) 
        super(props);
    

    render() 
        return (
            <div id="home">
                <h1> Welcome</h1>
                <h2> Who does this list beong to? </h2>
                <input placeholder="your name"/>
                <input type="button" value="enter" onClick=this.props.onEnter/>
            </div>
            )
    

【讨论】:

以上是关于即使从父组件传递函数后也无法从子组件更改状态的主要内容,如果未能解决你的问题,请参考以下文章

在 React Native 中将状态从子组件传递到父组件

如何在反应中将最新状态从子组件传递给父组件

将对象从子状态传递给父状态

无法从父反应组件调用子反应组件的属性

将两个道具从父组件传递给子组件会导致父组件未定义

React Context API,从子组件设置上下文状态,而不是将函数作为道具传递