【发布时间】:2017-07-16 07:18:48
【问题描述】:
基本上没有迹象表明该事件被绑定在某个地方并且没有触发。这是组件
class AgendaPointsList extends React.Component {
constructor(props) {
super(props);
this.onAgendaPointClick = this.props.onAgendaPointClick.bind(this);
}
render() {
let items = this.props.agenda_points.map((a, i) => {
return <AgendaPoint key={i} agenda_point={a} index={i} onClick={this.onAgendaPointClick} />
})
console.log(this.props)
return (
<table>
<tbody>
{items}
</tbody>
</table>
);
}
}
console.log(this.props) 输出:
Object
item_point: Object
item_points: Array[4]
onItemPointClick: onItemPointClick(id)
onModalCloseClick: onModalCloseClick(id)
store: Object
storeSubscription: Subscription
__proto__: Object
这里是 redux 组件:
const OPEN_AGENDA_POINT = 'meeting/OPEN_AGENDA_POINT'
const CLOSE_AGENDA_POINT = 'meeting/CLOSE_AGENDA_POINT'
const initialState = {
modal_is_open: false,
point_id: 0,
point_data: {}
}
const openAgendaPoint = function (id) {
return {
type: OPEN_AGENDA_POINT,
id: id
}
}
const closeAgendaPoint = function (id) {
return {
type: CLOSE_AGENDA_POINT,
id: id
}
}
const agendaPointsReducer = function (state = initialState, action) {
switch (action.type) {
case OPEN_AGENDA_POINT: {
state.modal_is_open = true,
point_id = action.id
}
case CLOSE_AGENDA_POINT: {
state.modal_is_open = false
}
default:
return state
}
}
const agendaPointsUiStateProps = (state) => {
return {
agenda_point: state.point_data
}
}
const agendaPointsUiActions = (dispatch) => {
return {
onAgendaPointClick: (id) => {
console.log(id)
dispatch(openAgendaPoint(id))
},
onModalCloseClick: (id) => {
dispatch(closeAgendaPoint(id))
}
}
}
const store = Redux.createStore(
agendaPointsReducer,
window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()
)
// Usage:
const AgendaPointsList = connectWithStore(
store,
AgendaPointsList,
agendaPointsUiStateProps,
agendaPointsUiActions
)
这是子组件:
class AgendaPoint extends React.Component {
render() {
return (
<tr>
<td>{ this.props.index + 1 }</td>
<td>{ this.props.agenda_point.title}</td>
<td>6</td>
<td>{ this.props.agenda_point.agenda_time } min</td>
</tr>
);
}
}
我尝试了多种绑定事件的方法:
onClick={this.props.onAgendaPointClick.bind(a.id, this)
onClick={this.props.onAgendaPointClick(a.id, this).bind(this)
onClick={() => this.props.onAgendaPointClick(a.id))
似乎不起作用。
使用this 进行 reac-redux 连接包装器以传入存储。这是在 Ruby on Rails Sprockets beta4 上运行的。
这样做的正确方法是什么?
【问题讨论】:
-
正确的绑定是
onClick={this.props.onItemClick.bind(this, a.id) -
这应该可以工作:
onClick={() => this.props.onItemClick(a.id))}在这种情况下,将它绑定到 this 是没有用的。当您使用这种方法时,您会遇到什么样的错误? -
@cubbuk 它可以在 React 调试工具现在识别为
onClick="bound onItemClick()"的范围内工作。但没有任何反应,并且事件本身的控制台日志没有任何作用 -
@stevenmahieu 绝对没有,没有约束,没有事件,没有任何东西。只需在 React 开发工具中使用“onClick=onClick()”即可。
-
@Aurimas 是 this.props 中存在的函数 onItemClick 吗?
标签: reactjs ecmascript-6 redux jsx sprockets