【问题标题】:How do I set the state of a parent component in a child component using an onClick function?如何使用 onClick 函数在子组件中设置父组件的状态?
【发布时间】:2019-11-25 11:34:54
【问题描述】:

我只会显示相关的代码。这是来自parent component的代码:

export default class App extends React.Component {

constructor(props) {
    super(props);
    this.state = {
        activeScreen: 'dashboard',
        authenticatedUser: this.getAuthenticatedUser(),
    }
}

setActiveScreen(key) {
    this.setState({
        activeScreen: key
    })
}

style = (label) => {
    if (label === 'Dashboard') {
        return {'border-top': '5px solid red'}
    }
}

render() {
    return (
        <div>
            {/* {this.serviceWorker()} */}
            <ToastContainer transition={Slide} />
            <Router>
                <Switch>
                    <NavBar  
authenticatedUser={this.state.authenticatedUser} activeScreen={this.state.activeScreen} 
setActiveScreen={this.setActiveScreen()} />

                </Switch>
            </Router>
        </div>
    );
}

}

子组件Navbar的代码是:

class NavBar extends Component {

constructor(props) {
    super(props);
}

adminMenu() {
    return (
        <div className='admin-menu'>
            {this.adminNav().map((i, key) => (
                        <li className="nav-item" style={this.props.style(i.label)} key={key}>
                            <Link className={`nav-link ${this.props.activeScreen == i.key ? 'active' : ''}`} to={i.to} onClick={() => this.props.setActiveScreen(i.key)}>
                                <i className={`fa fa-fw fa-${i.icon}`} aria-hidden="true"></i>
                                {i.label}
                                {this.props.activeScreen == i.key &&
                                    <span className="sr-only">(current)</span>
                                }
                            </Link>
                        </li>
            ))}
        </div>
    )
}

render() {
    return (
        {this.adminMenu()}
    );
}

adminNav() {
    return [
        {
            label: 'Dashboard',
            icon: 'tachometer',
            key: 'dashboard',
            to: '/',
            active: true,
            admin: false,
            sales: false
        },
        there are more of these objects
    ]
}
}

export default NavBar;

我得到的错误是在现有状态转换期间无法更新(例如在render 或其他组件的构造函数中)。渲染方法应该是 props 和 state 的纯函数;构造函数副作用是一种反模式,但可以移至componentWillMount。堆栈跟踪显示它位于setActiveScreen。我无法解决这个问题。

我的语法一切正常,但可能看起来不是这样,因为我删除了很多不相关的代码。

【问题讨论】:

  • 这一行setActiveScreen={this.setActiveScreen()}改成setActiveScreen={this.setActiveScreen}

标签: reactjs onclick


【解决方案1】:

您正在调用没有参数的函数。用这个更新你的代码;

setActiveScreen={this.setActiveScreen}

setActiveScreen={(key) => this.setActiveScreen(key)}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    • 2021-03-14
    • 2020-04-29
    • 2018-01-02
    • 2020-12-14
    相关资源
    最近更新 更多