Как получить 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.

https://reactjs.org/docs/refs-and-the-dom.html

По состоянию на 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)`
`;
Другие вопросы по тегам