Я использую компонент под названием реагировать-ввод-авторазмер. Проблема, с которой я столкнулся, заключается в том, что он не изменит размер ввода при изменении размера окна просмотра, поэтому я не хочу вручную подключаться к методам компонента и запускать copyInputStyles() и updateInputWidth().
Довольно новичок в React, поэтому не знаю, как этого добиться. Вы можете открыть ввод через inputRef, но это мне не поможет, нет?
Мой текущий сокращенный тестовый пример выглядит так, буду рад любым указателям на то, как запускать методы компонентов.
import React from 'react';
import styled from '@emotion/styled';
import AutosizeInput from 'react-input-autosize';
import {throttle} from 'lodash';
const StyledAutosizeInput = styled(AutosizeInput)`
max-width: 100vw;
`;
export default class signUp extends React.Component {
constructor (props) {
super(props);
this.inputRef = React.createRef();
}
componentDidMount() {
console.info(this.inputRef); // outputs input node
window.addEventListener('resize', this.resize);
this.resize();
}
componentWillUnmount() {
window.removeEventListener('resize', this.resize);
}
resize = throttle(() => {
console.info('force resize');
}, 100);
render() {
return (
<StyledAutosizeInput
inputRef = {node => this.inputRef = node}
/>
);
}
}





Обратный вызов inputRef = {node => this.inputRef = node}относится к элементу ввода html, а не компонент AutosizeInput. Передайте ссылку через реквизит ref, чтобы получить доступ к методам компонента.
...
resize = throttle(() => {
if (this.inputRef.current) {
this.inputRef.current.copyInputStyles()
this.inputRef.current.updateInputWidth()
}
}, 100);
render() {
return (
<StyledAutosizeInput
ref = {this.inputRef}
/>
);
}
Ха-ха, я на самом деле пытался с
refраньше, но после проверки вывода я даже не пытался запустить метод, поскольку они там не появлялись. Спасибо!