Нарушение инварианта: ожидается, что React.Children.only получит один дочерний элемент React.

Я продолжаю получать нарушение инварианта, и я действительно не знаю, почему ... это определенно связано с OverlayTriggers. При их отключении все работает нормально.

Импорт:

import Col from 'react-bootstrap/lib/Col';
import Row from 'react-bootstrap/lib/Row';
import Tooltip from 'react-bootstrap/lib/Tooltip';
import OverlayTrigger from 'react-bootstrap/lib/OverlayTrigger';

предполагается отображать элемент списка с парой ключ/значение, где значение имеет всплывающую подсказку:

const renderCustomField = (field,customFields) => {
    const tooltip = (<Tooltip id="tooltip">{customFields[field]['sub']}</Tooltip>)
    return (
        <li>
            <OverlayTrigger placement="top" overlay={tooltip}>
                {field}
            </OverlayTrigger>
        </li>
    )
}

Класс, который хочет отображать customFields:

export default class EventHeaderCustomFields extends Component {
    render () {
        const customFieldsNames = Object.keys(this.props.customFields);

        return (
            <Col xs={12}>
                <h4><strong>Short overview:</strong></h4>
                <ul>
                {customFieldsNames.map(
                    (field) => renderCustomField(field,this.props.customFields)
                )}
                </ul>
            </Col>
        )
    }
}

EventHeaderCustomFields.propTypes = {
    eventData:PropTypes.object
};

person Fabian Bosler    schedule 14.07.2017    source источник


Ответы (1)


OverlayTrigger ожидает, что дочерний элемент React, обертывание {field} в span или любой другой действительный элемент React jsx исправит это.

<li>
    <OverlayTrigger placement="top" overlay={tooltip}>
        <span>{field}</span>
    </OverlayTrigger>
</li>
person Jibolash    schedule 14.07.2017
comment
✓ Сэкономил мне кучу времени... Спасибо - person mprivat; 11.06.2020