Как получить refs.value в стиле React компонента?
Я хочу получить ref значение ввода, без стилизованного компонента:
<form role='form' method='POST' onSubmit= {::this.onSubmit}>
<input id='name' type='text' ref='name' name='name' required/>
<button> Register</button></form>
onSubmit(e){
e.preventDefault();
console.log(this.refs.name.value)...}
Как получить ref.value в styled-компоненте?
<form role='form' method='POST' onSubmit= {::this.onSubmit}>
<StyledInput innerRef={name => { this.input = name }} id='name' type='text' name='name' />
<button> Register</button></form>
onSubmit(e){
e.preventDefault();
console.log(this.input);....}
2 ответа
Решение
Добавление innerRef={name => { this.input = name }}
делает входной узел доступным через this.input
console.log(this.input.value)
Вы можете получить значение от Event
без использования ref
onSubmit(e) {
console.log(e.target.value)
}
Подробнее о формах React.
Демо-компонент:
import React from "react";
import styled from "styled-components";
const InputStyled = styled.input`
background: lightgreen;
`;
class Test extends React.Component {
onChange = e => {
console.log(this.input.value);
console.log(e.target.value);
};
render = () => {
return (
<InputStyled
onChange={this.onChange}
innerRef={input => (this.input = input)}
/>
);
};
}
export default Test;
Надеюсь, поможет!
Не уверен, как StyledInput работает с refs, но вы можете получить доступ к узлу ref с помощью ключа.current объекта ref.
По состоянию на React 16.8.0. с крючками вы можете получить доступ к ссылке следующим образом: useRef
-
import React, { useRef } from 'react';
...
const inputRef = useRef(null);
...
<StyledInput ref={inputRef} />
<Button onClick={()=>{inputRef.current.focus()}}>Focus on input</Button>
...
const StyledInput = styled(input)`
`;
const Button = styled(button)`
`;