2017-07-31 13 views
1

私はトップコンポーネントから状態フラグを渡しました。フラグが真である場合、カスタム妥当性を設定する必要があります。それ以外の場合は、カスタム妥当性をクリアする必要があります。私はこのエラーが発生しています:Reactコンポーネントのカスタム妥当性を設定する方法は?

Unknown prop `setCustomValidity` on <input> tag. Remove this prop from the element. 

しかし、この問題はsetCustomValidityがまだReactで認識されていません。

import React from "react"; 
import BaseField from "./BaseField"; 
import PropTypes from "prop-types"; 

const InputField = props => { 
const { name, type, isMandatory, onChange, pattern, misMatchEmail } = props; 

return (
    <BaseField {...props}> 
    <input 
     name={name} 
     pattern={pattern} 
     type={type} 
     onChange={onChange} 
     setCustomValidity={`${misMatchEmail} ? 'Confirm email does not match' : ''`} 
     onSelect={e => e.preventDefault()} 
     onCopy={e => e.preventDefault()} 
     onPaste={e => e.preventDefault()} 
     onCut={e => e.preventDefault()} 
     required={isMandatory} 
    /> 
    </BaseField> 
); 
}; 

InputField.propTypes = { 
name: PropTypes.string.isRequired, 
type: PropTypes.string.isRequired, 
onChange: PropTypes.func.isRequired, 
isMandatory: PropTypes.bool.isRequired, 
misMatchEmail: PropTypes.bool, 
pattern: PropTypes.string 
}; 

export default InputField; 

どうすればこの問題を回避できますか?

+0

まずはあなたの? es6のテンプレートリテラル( '')は文字列として扱われ、if-elseとして機能しません。 このように使用します setCustomValidity = {misMatchEmail? '確認メールが一致しません': ''} –

答えて

1

可能な回避策の1つとして、refを使用し、その属性の対応するハンドラ設定値に、純粋なjavascript/jqueryを直接使用することができます。このような 何か:

<input 
    type="text" 
    ref={(c) => { c.setAttribute("setCustomValidity", `${misMatchEmail} ? 'Confirm email does not match' : ''`); }} /> 
+0

機能コンポーネントをクラスコンポーネントに変更する必要がありますか? –

+0

いいえ - あなたは大丈夫です。ここをクリックしてください:https://facebook.github.io/react/docs/refs-and-the-dom.html#refs-and-functional-components – Amid

+0

このエラーが表示されます。プロパティ 'setAttribute'を読み取ることができません。 null –

0

setCustomValidityは反応によってサポートされていません。代わりに、dangerouslySetInnerHTMLを使用して、あなたが望むものを達成しようとすることができます。