私が見たすべてのケースでは、AppBarは最初の子としてツールバーで実装されています。ツールバーのスタイルシートは、テーマに定義されているブレークポイントに基づいて高さを決定します。
はこちらをご覧ください:https://github.com/callemall/material-ui/blob/v1-beta/src/Toolbar/Toolbar.js
をあなたが該当ブレークポイントのために高さを変化させる、あなたのアプリケーションバーイメージのクラスにスタイルシートを定義するために同様のアプローチを使用することができます。次に、コンポーネントをレンダリングするときに、クラスをイメージに適用します。
注:ツールバー、AppBarなどで実行されているように、withStyles HOCを使用する場合、そのスタイルシートで定義されたクラスは、クラスという名前の小道具を介して利用できます。
あなたはAppBarの合成の必要性については正しいですが、その問題はまだ解決されておらず、これはとにかくベータブランチです。それが解決されると、より価値のあるソリューションが移行する価値があるはずです。
この回答が役に立ったら嬉しいです。私はコードサンプルを追加しましたが、食料品店の駐車場で待っている間に私の電話から応答しています。私がチャンスを得たら、私はこの答えを更新します。ここで
は、新たな再利用可能なコンポーネントのスタイルを複製し、1つのアプローチです:
import createStyleSheet from 'material-ui/styles/createStyleSheet';
import withStyles from 'material-ui/styles/withStyles';
// define these styles once, if changes are needed because of a change
// to the material-ui beta branch, the impact is minimal
const styleSheet = createStyleSheet('ToolbarImage', theme => ({
root: {
height: 56,
[`${theme.breakpoints.up('xs')} and (orientation: landscape)`]: {
height: 48,
},
[theme.breakpoints.up('sm')]: {
height: 64,
},
},
}));
// a reusable component for any image you'd need in a toolbar/appbar
const ToolbarImage = (props) => {
const { src, classes } = this.props;
return (
<img src={src} className={classes.root} />
);
};
// this higher order component uses styleSheet to add
// a classes prop that contains the name of the classes
export default withStyles(styleSheet)(ToolbarImage);
別のアプローチは、それがを使用するようroot
クラスfor all Toolbarsをオーバーライドし、business variablesとしてテーマに、標準ツールバーの高さを追加することです彼ら、そしてあなたは再びそれらを参照する必要がある時はいつでもテーマを使用します。彼らはテーマの一部だから
// define the standard heights in one place
const toolbarHeights = {
mobilePortrait: 56,
mobileLandscape: 48,
tabletDesktop: 64,
};
// create the theme as you normally would, but add the heights
let theme = createMuiTheme({
palette: createPalette({
primary: blue,
accent: pink,
}),
standards: {
toolbar: {
heights: toolbarHeights,
},
},
});
// recreate the theme, overriding the toolbar's root class
theme = createMuiTheme({
...theme,
overrides: {
MuiToolbar: {
// Name of the styleSheet
root: {
position: 'relative',
display: 'flex',
alignItems: 'center',
minHeight: theme.standards.toolbar.heights.mobilePortrait,
[`${theme.breakpoints.up('xs')} and (orientation: landscape)`]: {
minHeight: theme.standards.toolbar.heights.mobileLandscape,
},
[theme.breakpoints.up('sm')]: {
minHeight: theme.standards.toolbar.heights.tabletDesktop,
},
},
},
},
});
次に、あなたが作成したスタイルシートでは、これらの高さを参照することができます。UPDATED
1.0.0-beta.11発売後:
各ブレークポイントのためのツールバーminHeightの提供をテーマにミックスイン可能なツールバーが用意されました。あなたがアプリケーションバーコンポーネントの標準の高さに対する元素のスタイルをする必要がある場合は、独自のスタイルを構築するために、このオブジェクトを使用することができます。
この例では
const toolbarRelativeProperties = (property, modifier = value => value) => theme =>
Object.keys(theme.mixins.toolbar).reduce((style, key) => {
const value = theme.mixins.toolbar[key];
if (key === 'minHeight') {
return { ...style, [property]: modifier(value) };
}
if (value.minHeight !== undefined) {
return { ...style, [key]: { [property]: modifier(value.minHeight) } };
}
return style;
}, {});
は、toolbarRelativeProperties
できるオブジェクトを返す関数を返します。あなたのスタイルオブジェクトに広げられます。これは、指定されたプロパティをAppBarの高さに基づく値に設定する単純なケースを解決します。
「AppBar」の高さ(私が正しく理解している場合は 'ToolBar'の高さ)の仕方を説明してくれてありがとう。私は自分の目標が 'AppBar'に画像を追加することになっているのであれば、その画像も' ToolBar'の子になると思います。親 'ToolBar'の' classes'オブジェクトへの参照を取得することは可能でしょうか?そうではなく、私の "AppBarImage"コンポーネントで同様の指定をする代わりにそれらのスタイルを参照することができますか? –
あなたは確かにクラスのpropまたはそこに含まれるクラスのどれかをツールバーの子に渡すことができます。問題は、ルートクラスが必要以上に機能することです。ツールバー内に画像を配置する必要があるときはいつでも、ToolBarImageのような独自のクラスセットを持つ新しいコンポーネントを定義する必要があります。 –
感謝ken、ええ、 'ToolBar'から' ToolBarImage'に 'classes'を渡したくないかもしれませんが、おそらくその部分を使います。私はダンサーだと確信していますが、 'ToolBar'の' classes'小道具への参照を取得して子供の一人に伝えることに問題があります。私は 'ToolBar'に対して' ref'関数を使ってみましたが、refを見たときに 'class' propを持っていませんでした。 –