Итак, прежде чем я укажу на два возможных решения, важно отметить, что вы используете метод render
в вызове родительской функции, и что методы render
используются только в функциях класса, а не в функциях без состояния.
Если вы хотите использовать функцию без сохранения состояния, вам следует использовать return
.
Обратите внимание на разницу в документах
И вот скриншоты :
Теперь о решении, Stateless Functions
не должны есть методы, и добавление их обычно считается плохой практикой. Я понимаю, что вы хотите познакомиться с компонентами, не относящимися к классу, но нет ничего плохого в использовании их сочетания, и обычно так и должно быть. Если вы хотите добавить методы, вы должны использовать Class Component
и делать это как this :
class NavMobile extends Component {
constructor(props) {
super(props);
this.state = {
// Empty for now
}
}
toggleMenu = () => {
// Your code
}
render() {
return (
// More code
<Navbar toggleMenu={this.toggleMenu} />
// More code
)
}
}
Причина, по которой это считается плохой практикой, заключается в том, что функция toggleMenu()
будет переопределяться каждый раз при вызове компонента.
Если вы действительно хотите go вперед с этим, то вам следует объявить функцию вне функции компонента, поэтому вы объявляете функцию только один раз и используете та же ссылка.
Вы должны попробовать что-то в этом роде:
const toggleMenu = (isOpen) => { ... };
И называть это в компоненте следующим образом
const NavMobile = (props) => {
return (
// Your code
<NavBar toggleMenu={toggleMenu.bind(null, propsYouWantToPass} />
)
}
Наконец, похоже, что вы ' ищем объект события внутри функции, например, (event.type === 'keydown')
, но такое событие не передается, поскольку в дочернем компоненте NavBar
вы вызываете его с аргументом false
.
Сообщите мне, поможет ли это .
PS: Мой комментарий в самом начале о render
против return
был нацелен на ваш код до того, как вы внесли изменения. Я все равно оставлю это здесь для потомков.