reactjs - スタイル付きコンポーネントがオブジェクトを生成するのはなぜですか?

CorePress2024-05-09  10

Why is Styled Components Generating an Object?

スタイル付きコンポーネントを使用する非常に基本的なコードがいくつかあります。

import styled from 'styled-components';

const Test = () => <div>foo</div>;
const StyledTest = styled(Test)`
  border: 10px solid red;
`;
console.log(typeof StyledTest); // object!!!

問題は、console.log の最後の行がオブジェクト (関数ではない) をログに記録していることです。これを使用しようとすると、当然ながらエラーが発生します。

これは、ライブラリからコンポーネントをスタイルしようとしたときにも発生します。

import Modal from 'react-modal';
const StyledModal = styled(ReactModalAdapter)`
  border: 10px solid red;
`;
console.log(typeof StyledModal); // object!!!

私の何が間違っているのでしょうか?



-----------------------------------

ここでの答えは私の質問に対する答えですが、私が遭遇した問題に遭遇した人(つまり、StyledTest に相当する関数/クラスではないというエラーが発生した場合)にとって、答えはおそらく次のとおりです。 React/Styled Components のバージョンが同期していません。参照:

-----

styled-component 要素の console.log は常にオブジェクトになります。

コードが正しく動作するには、StyledTest を次のように変更する必要があります。

const StyledTest = styled.div`
  border: 10px solid red;
`;

これをテストで使用します。

const Test = () => <StyledTest>foo</StyledTest>;

まずスタイルを設定し、作成したものを適用する必要があります。

先ほどと同じように作成するには、StyledTest で渡すパラメータはスタイル コンポーネントである必要があるため、次のようなものがあるとします。

const Test = styled(({ ...rest }) => <div {...rest} />)`
  border: 10px solid red;
`;

const StyledTest = styled(Test)`
  border: 10px solid blue;
`;

この例では、Test はスタイル付きコンポーネント要素であるため、これを編集できます。



-----------------------------------

ありがとう、私が見逃していたのは、小道具を通す必要があるという部分でした...ドキュメントに隠されています! ;)

-----

問題ありません ð はい、それはドキュメント上のすべてを見つけるのは常に困難です。 ð 時々、ドキュメントが好きではないことがあります。

-----

Your guide to a better future - quark24
Your guide to a better future - quark24