React Native

FlatListにshadowがつかない時

React Native
この記事は約5分で読めます。

はじめに

過去に自分がハマってしまったところの解決策をメモとして残しておきます。
結論から言うとFlatListにshadowをつけるにはbackgroundColorが必要です

ベースとするコード

FlatListであればなんでもOKです

import React from 'react';
import {StyleSheet, View, FlatList, Text} from 'react-native';

const DATA = [
  {id: 1, name: 'Michel'},
  {id: 2, name: 'Mike'},
  {id: 3, name: 'Kevin'},
  {id: 4, name: 'John'},
  {id: 5, name: 'Jessica'},
];

const Item = ({name}) => (
  <View style={styles.item}>
    <Text style={styles.name}>{name}</Text>
  </View>
);

const App = () => {
  const renderItem = ({item}) => <Item name={item.name} />;
  return (
    <View style={styles.container}>
      <FlatList
        data={DATA}
        renderItem={renderItem}
        keyExtractor={item => item.id}
      />
    </View>
  );
};

const styles = StyleSheet.create({
  container: {
    flex: 1,
    paddingTop: 120,
  },
  item: {
    borderWidth: 1,
    padding: 20,
    margin: 16,
    // shadowに関するプロパティ
    shadowColor: '#000',
    shadowOffset: {
      width: 0,
      height: 4,
    },
    shadowOpacity: 0.25,
    shadowRadius: 4,
    elevation: 1,
  },
  name: {
    fontSize: 32,
    textAlign: 'center',
  },
});

export default App;

こんな感じの画面表示になります
shadowに関するプロパティに数字を入れても反映されていません


影をつける

影をつけるためにはItemコンポーネントにbackgroundColorを入れてください

import React from 'react';
import {StyleSheet, View, FlatList, Text} from 'react-native';

const DATA = [
  {id: 1, name: 'Michel'},
  {id: 2, name: 'Mike'},
  {id: 3, name: 'Kevin'},
  {id: 4, name: 'John'},
  {id: 5, name: 'Jessica'},
];

const Item = ({name}) => (
  <View style={styles.item}>
    <Text style={styles.name}>{name}</Text>
  </View>
);

const App = () => {
  const renderItem = ({item}) => <Item name={item.name} />;
  return (
    <View style={styles.container}>
      <FlatList
        data={DATA}
        renderItem={renderItem}
        keyExtractor={item => item.id}
      />
    </View>
  );
};

const styles = StyleSheet.create({
  container: {
    flex: 1,
    paddingTop: 120,
  },
  item: {
    // backgroundColorが必要
    backgroundColor: 'white',
    borderWidth: 1,
    padding: 20,
    margin: 16,
    // shadowに関するプロパティ
    shadowColor: '#000',
    shadowOffset: {
      width: 0,
      height: 4,
    },
    shadowOpacity: 0.25,
    shadowRadius: 4,
    elevation: 1,
  },
  name: {
    fontSize: 32,
    textAlign: 'center',
  },
});

export default App;

実際の画面はこんな感じになります



過去の自分はbackgroundColorを入れていなかったので、うまく表示されませんでした
学習当初はこういうのにも時間がかかってしまうものですよねー😱