javascript - ReactJS Onclick 不适用于生成的元素

标签 javascript reactjs

我正在生成一个元素列表:

LeftPanel.js

if (this.state.trader_or_team == 'trader') {
            itemList = users.map(u => <User key={u.id} user={u}
                                            selected={this.props.selected_trader && this.props.selected_trader.id == u.id}
                                            onClick={this.props.handleTraderSelection.bind(this, u)}
            />);
        } else {
            itemList = teams.map(t => <Team key={t.id} team={t}
                                            selected={this.props.selected_team && this.props.selected_team.id == t.id}
                                            onClick={this.props.handleTeamSelection.bind(this, t)}
            />)
        }

handleTeamSelection/handleTraderSelection 位于父组件中:

TargetManager.js

handleTraderSelection(selected_trader) {
        console.log('test')
        this.setState({
            selected_trader
        });
    }

    handleTeamSelection(selected_team) {
        this.setState({
            selected_team
        });
    }

它们作为 Prop 传递下来:

<LeftPanel
                                   handleTraderSelection={::this.handleTraderSelection}
                                   handleTeamSelection={::this.handleTeamSelection}
                        />

并渲染:

LeftPanel.js

return(
    <div className="item-container">
        {itemList}
    </div>
)

当我点击任何元素时,什么也没有发生。出了什么问题?


当我在 LeftPanel.js 的渲染方法中将某些内容绑定(bind)到它时,它似乎会中断:

render() {
    this.props.handleTraderSelection()
    ...

有效,

render() {
    this.props.handleTraderSelection.bind(this)
    ...

不起作用。

最佳答案

尝试绑定(bind) handleTraderSelectionhandleTeamSelection 函数,例如

handleTraderSelection = (selected_trader) => {
        console.log('test')
        this.setState({
            selected_trader
        });
    }

    handleTeamSelection = (selected_team) => {
        this.setState({
            selected_team
        });
    }

我一直按照常规方法调用父函数,例如

handleTraderSelection = (value) => {
   this.props.handleTraderSelection(value);
}
handleTeamSelection= (value) => {
   this.props.handleTeamSelection(value);
}
if (this.state.trader_or_team == 'trader') {
            itemList = users.map(u => <User key={u.id} user={u}
                                            selected={this.props.selected_trader && this.props.selected_trader.id == u.id}
                                            onClick={this.handleTraderSelection.bind(this, u)}
            />);
        } else {
            itemList = teams.map(t => <Team key={t.id} team={t}
                                            selected={this.props.selected_team && this.props.selected_team.id == t.id}
                                            onClick={this.handleTeamSelection.bind(this, t)}
            />)
        }

这对我来说效果很好。

关于javascript - ReactJS Onclick 不适用于生成的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41236337/

相关文章:

javascript - 获取数组中的所有元素?

javascript - 在 React + Redux.js 应用程序中,在 Provider 组件之外操作 DOM 元素的正确方法是什么?

javascript - 按键过滤对象及其项

Javascript 变量跟踪它们的副本?

javascript - 获取 polyfill,未定义的 PromiseValue

javascript - Redux 开发工具不工作

javascript - 使用 Cytoscape 强制引导 Cola 布局,类似于 Cola 示例

javascript - 在 JavaScript 中,为常规元素和命名空间元素分配类名是否不同?

javascript - 比较两个数组并合并而不重复

javascript - 使用 enzyme 测试 `React.createRef` api