私は現在、プレゼンテーション コンポーネントとコンテナー コンポーネントを使用して meteor の simple-todos チュートリアルをリファクタリングしようとしていますがinput
、機能ステートレス コンポーネントの参照にアクセスしようとすると問題が発生しました。にアクセスするrefs
には、コンポーネントをステートフル コンポーネントでラップする必要があることがわかりましたinput
。
// import React ...
import Input from './Input.jsx';
const AppWrapper = (props) => {
// ... more lines of code
<form className="new-task" onSubmit={props.handleSubmit}>
<Input />
</form>
}
import React, { Component } from 'react';
この入力は、少なくともクラス構文を使用しているため、ステートフルである必要があります。
export default class Input extends Component {
render() {
return (
<input
type="text"
ref="textInput"
placeholder="Type here to add more todos"
/>
)
}
}
refs を使用して、入力の値を囲んで検索しますAppContainer
。
import AppWrapper from '../ui/AppWrapper.js';
handleSubmit = (event) => {
event.preventDefault();
// find the text field via the React ref
console.log(ReactDOM.findDOMNode(this.refs.textInput));
const text = ReactDOM.findDOMNode(this.refs.textInput).value.trim();
...
}
console.log の結果はnull
です。私の入力コンポーネントはステートフルではありませんか? このコンポーネントをステートフルにするには、値を設定するコンストラクターを設定する必要がありますか?それともthis.state
、使用する必要があるときに機能的なステートレス コンポーネントの使用をあきらめるべきrefs
ですか?