ClaudeReact NativeAug 14, 2024, 12:00 AM

React Native 0.75 - Support for Percentage Values in Layout, New Architecture Stabilization, Template & init Updates, and more

A condensed section focused on the key takeaways first.

Original Post

Quick Digest

Summary

A condensed section focused on the key takeaways first.

claudeenmodel: claude-sonnet-4-20250514

React Native 0.75 - Yoga 3.1 Layout Improvements and New Architecture Stabilization

Key Points

  • Yoga 3.1 adds percentage value support for gaps and transforms
  • New Architecture gets stable jsi::Runtime access APIs
  • Framework-based development becomes officially recommended

Summary

React Native 0.75 introduces significant layout improvements with Yoga 3.1, continues New Architecture stabilization efforts, and shifts toward framework-based development recommendations.

Key Points

Layout Improvements (Yoga 3.1)

  • Percentage values in gaps: gap, columnGap, and rowGap now support percentage strings (e.g., '20%')
  • Percentage values in transforms: translateX and translateY transformations now accept percentage values
  • These features are New Architecture only

New Architecture Stabilization

  • Fixed multiple bugs including adjustsFontSizeToFit on Android and text alignment issues
  • New stable API for accessing jsi::Runtime in TurboModules
  • Added CallInvoker API for thread-safe runtime access from UI thread
  • React Native Directory now shows New Architecture support status

Framework Recommendation Changes

  • Template moved from core package to @react-native-community/template
  • react-native init command will be sunset on December 31st, 2024
  • Expo and other frameworks are now the recommended approach
  • Auto-linking performance improvements: ~6.5x faster on Android, ~1.5x faster on iOS

Breaking Changes

  • Touchable components converted to functional components (affects TypeScript generics)
  • Last version supporting Android minSdk 23 and iOS 13.4
  • Various Android/iOS API removals and deprecations
  • Community CLI removes ram-bundle and profile-hermes commands

Full Translation

Translations

A translation section that keeps the flow of the original article.

claudejamodel: claude-sonnet-4-20250514

React Native 0.75 - レイアウトでのパーセンテージ値サポート、New Architecture安定化、テンプレート & init更新、その他

本日、React Native 0.75のリリースを発表できることを嬉しく思います!このリリースでは、%値をサポートするYoga 3.1、New Architectureの安定化修正、React Native Frameworkの使用推奨の導入など、いくつかの機能を提供します。

ハイライト

  • Yoga 3.1とレイアウト改善
  • New Architecture安定化
  • フレームワークの使用

破壊的変更

  • TypeScriptのTouchablesはジェネリック式で型として使用できなくなりました
  • minSdk 23とminIOSVersion 13.4をサポートする最後のバージョン
  • Android: JSIModuleが削除されました
  • Android: PopUp Menuがコアから削除されました
  • iOS: Push Notifications非推奨作業が完了しました
  • Community CLI: ram-bundleとprofile-hermesコマンドの削除

ハイライト

Yoga 3.1とレイアウト改善

React Native 0.74でYoga version 3.0を最後に出荷して以来、アプリケーションのための多くの改善と新しいレイアウト機能を継続的に提供してきました。React Native 0.75はYoga 3.1を搭載しており、新機能の詳細については公式Yogaのリリースブログ投稿で確認できます。

注目すべき、そして非常に要望の多かった機能は、ギャップや変換情報など様々な場所での%値のサポートです。

これらの機能はNew Architectureでのみ利用可能です。これらを使用したい場合は、移行を検討してください。

ギャップでのパーセンテージ値

0.75では、gapcolumnGaprowGapプロパティが%値を含む文字列をサポートするようになりました。例えば:

function App(): React.JSX.Element {
  return (
    <SafeAreaView
      style={{
        marginTop: 20,
        alignItems: 'center',
        flex: 1,
        rowGap: '20%',
      }}>
      <View style={{flex: 1, flexDirection: 'row', columnGap: '10%'}}>
        <View
          style={{
            backgroundColor: 'purple',
            width: 100,
            height: 100,
          }}
        />
        <View
          style={{
            backgroundColor: 'blue',
            width: 100,
            height: 100,
          }}
        />
        <View
          style={{
            backgroundColor: 'green',
            width: 100,
            height: 100,
          }}
        />
      </View>
      {/* 他のViewコンポーネント */}
    </SafeAreaView>
  );
}

変換でのパーセンテージ値

transformプロパティも、translate変換で%値を受け入れるようになりました。例えば、以下のコンポーネントは赤い四角のX座標を幅の100%、Y座標を高さの100%移動します:

function Translated() {
  return (
    <SafeAreaView
      style={{
        marginTop: 20,
        flex: 1,
        rowGap: '20%',
      }}>
      <View
        style={{
          backgroundColor: 'red',
          width: 100,
          height: 100,
          transform: [{translateY: '100%'}, {translateX: '100%'}],
        }}
      />
    </SafeAreaView>
  );
}

New Architecture安定化

React ConfでNew ArchitectureがBetaであることを発表して以来、安定性に関するいくつかのバグ修正と改善を提供してきました。私たちの目標は、New Architectureが近い将来に安定版と見なされることです。

修正したバグと欠落機能の例:

  • AndroidでのadjustsFontSizeToFitの修正 (#44075)
  • AndroidでインラインビューでtextAlignが動作しない問題の修正 (#44146)
  • iOSでテキストベースラインが上に移動する問題の修正 (#44932)

Expoの方々と協力して、React Native DirectoryにNew Architectureサポート情報を追加し、ライブラリがNew Architectureをサポートしているかどうかがすぐに分かるようにしました。

TurboModulesでのjsi::Runtimeへのアクセス

過去には、ネイティブモジュールからjsi::Runtimeにアクセスする推奨方法がありませんでした。0.74で実験的APIを導入し、0.75でその安定性を発表できることを嬉しく思います。

iOSでの例:

@interface RCTSampleTurboModule() <RCTTurboModuleWithJSIBindings>
@end

#pragma mark - RCTTurboModuleWithJSIBindings
- (void)installJSIBindingsWithRuntime:(jsi::Runtime &)runtime {
  runtime.global().setProperty(runtime, "myGlobalFunction", jsi::Function::createFromHostFunction(...));
}

Androidでの例:

public class SampleTurboModule extends NativeSampleTurboModuleSpec implements TurboModuleWithJSIBindings {
  @Override
  public native BindingsInstallerHolder getBindingsInstaller();
}

フレームワークの使用

今年のReact Confで共有したように、React Nativeアプリを構築する推奨方法は、Expoなどのフレームワークを使用することです。

この推奨を反映するため、このバージョンには以下の変更が含まれています:

  • /templateフォルダをreact-nativeパッケージから別のリポジトリreact-native-community/templateに移動
  • 2024年12月31日をもってreact-native initコマンドを廃止

テンプレートのreact-native-community/templateへの移動

歴史的に、react-nativeはNPMパッケージ内に/templateフォルダを含んでおり、Community CLIが新しいプロジェクトを作成する際に使用していました。これにより、テンプレートの更新が遅くなっていました。

最新のフレームワーク使用推奨により、コアNPMパッケージ内に独断的なテンプレートを含めることは私たちのビジョンと一致しないと感じました。そのため、テンプレートを@react-native-community/templateパッケージに移動することにしました。

react-native initの廃止

歴史的に、react-native initはReact Nativeプロジェクトを作成するデフォルトコマンドでした。しかし、2024年において、このコマンドはフレームワークが提供するオンボーディング体験と同じものを提供しないと感じています。

2024年12月31日以降、initコマンドはプロジェクトを作成しなくなります。以下のいずれかを使用する必要があります:

  • Expoなどのフレームワークを使用(npx create-expo-appなど)
  • Community CLIを直接呼び出し(npx @react-native-community/cli init

react-native configおよびinit以外のすべてのコマンドは通常通り動作し続けます。

オートリンクのパフォーマンス改善

オートリンクロジックを書き直してより高性能にしました。これにより、AndroidとiOSの両方でビルド速度が向上します。React Native 0.75では、Expoを使用している場合、オートリンクステップがAndroidで約6.5倍、iOSで約1.5倍高速になります。

破壊的変更

TypeScriptのTouchablesはジェネリック式で型として使用できなくなりました

TouchableOpacityTouchableHighlightコンポーネントが関数コンポーネントに変換されました。これにより、値と型として使用できなくなりました。

import {TouchableHighlight} from 'react-native';
const ref = useRef<TouchableHighlight>(); 
// ^^^ TS2749: TouchableHighlight refers to a value, but is being used as a type here.
// Did you mean typeof TouchableHighlight?

代わりに、組み込みのReact型を使用する必要があります。