React HOC回调无法使用默认道具

时间:2018-05-03 13:14:10

标签: javascript reactjs higher-order-components recompose

我做了一个简单的HOC重构,但由于某种原因它没有使用默认道具。如果我提供的外部道具工作正常,但没有默认道具(我得'onCallback'不是一个函数,所以基本上是一个未定义的错误)

我的HOC:

import React from 'react'

import { withStateHandlers, withHandlers, compose } from 'recompose'

const editableRow = () =>
    compose(
        withStateHandlers(
            { isEditing: false, editingId: null },
            {
                toggleEditing: ({ isEditing, editingId }) => entryId => ({
                    isEditing: !isEditing,
                    editingId: isEditing ? null : entryId
                })
            }
        ),
        withHandlers({
            handleSave: ({
                isEditing,
                editingId,
                onEdit,
                onCreate,
                list
            }) => values => { return onEdit(25) }
        })
    )

export default editableRow

我尝试将其与默认道具一起使用并且不起作用:

import React from 'react'
import { Button, Checkbox, Icon, Table, Input } from 'semantic-ui-react'
import PropTypes from 'prop-types'
import editableRow from 'hoc/editableRow'

const DataRow = (props) => 
    <Table.Row 
        onClick={props.handleSave}>
        {
            props.children
        }
    </Table.Row>

DataRow.defaultProps = {
    onCreate: value => console.log('100'),
    onEdit: value => console.log(value * 2)
}

export default editableRow()(DataRow)

我提供道具,所以它的工作正常:

<DataRow
    onCreate={(value)=>console.log('on create', value*2)}
    onEdit={(value)=>console.log('onEdit', value*3)}
>

1 个答案:

答案 0 :(得分:3)

将其添加到组件的顺序的原因。因此,您需要在HOC内部pyscopg2,但默认道具会添加到组件中,在这种情况下,它们永远不会通过HOC。但是如果你从外面添加它们,HOC可以访问它们:

onCreate