0
votes

Comment dois-je séparer mon fichier js unique en fichier logique, présentateur et css?

Je suis assez nouveau dans React native et je l'étudie avec des tutoriels en ligne

Ici, mon fichier js principal nommé RequestScreen (fichier js) contient tout le code (logique, présentation, parties css)

J'essaie de créer un dossier RequestScreen avec 4 fichiers js (container.js, index.js, presenter.js et styles.js) au lieu d'un seul code entier.

Cependant, je suis coincé avec le processus de séparation.

Pourriez-vous m'aider à diviser mon code de réaction ci-dessous en 4 fichiers séparés pour une meilleure structure de conception?

un bon exemple pour moi?

import React, {useState} from 'react';
import styled from 'styled-components';
import Text from '../components/Text'; //Customized Text component
import NumberPad from '../components/NumberPad';  //Customized NumPad component

const SendRequestScreen = ( {navigation} ) => {
    
    
    //*********Logic Parts it has to be moved to container.js
    ///////////
    ///////////
    const [amount, setAmount] = useState("0");

    const convertToDollars = (currentAmount) => {
        const newAmount = currentAmount / 100;
        return newAmount.toLocaleString("en-US", { style: "currency", currency: "USD"});
    };

    const pressKey = (item, index) => {
        setAmount((prev) => {
            return index != 10 ? prev + item : prev.slice(0, prev.length - 1);
        });
    };

    //*********Presentation parts it has to be moved to presenter.js
    ///////////
    ///////////
    return (
        <Container>
            <Text center large heavy margin="16px 0 0 0">
                Send
            </Text>

            <Amount>
                <Text title heavy>
                    {convertToDollars(amount)}
                </Text>
                <Text bold color="#727479">
                    Choose amount to send
                </Text>
            </Amount>

            <User>
                <ProfilePhoto source={require("../assets/images/test.png")} />
                <UserDetails>
                    <Text medium heavy>
                        Jin
                    </Text>
                </UserDetails>
                <LogOut onLongPress={() => navigation.navigate("Touch")} delayPressIn={0}>
                <Text >Log Out</Text>
                </LogOut>
            </User>

            <Send>
                <Text medium heavy>
                    Send {convertToDollars(amount)} to Jin
                </Text>
            </Send>

            <NumberPad onPress={pressKey} />
        </Container>
        
    )
}

 //*********CSS parts it has to be moved to styles.js
 ///////////
 ///////////
const LogOut = styled.TouchableOpacity`
    width: 54px;
    height: 20px;
    margin-right: 12px;
    background-color: #5196f4;
    border-radius: 4px;
`

const Container = styled.SafeAreaView`
    flex: 1;
    background-color: #1e1e1e;
`

const Amount = styled.View`
    margin-top: 64px;
    align-items: center;
`;

const User = styled.View`
    margin: 32px 16px;
    flex-direction: row;
    align-items: center;
`;

const ProfilePhoto = styled.Image`
    width: 48px;
    height: 48px;
    border-radius: 12px;
`;

const UserDetails = styled.View`
    flex: 1;
    margin: 0 16px;
`;

const Send = styled.TouchableOpacity`
    margin: 16px;
    background-color: #5196f4;
    padding: 16px 32px;
    align-items: center;
    border-radius: 12px;
`;

const StatusBar = styled.StatusBar``;


export default SendRequestScreen;



0 commentaires

3 Réponses :


0
votes

C'est assez simple. vous pouvez exporter vos StyledComponents comme mylist-styling.js

import React, {useState} from 'react';
import { LogOut } from './myList-styling'; // here is usage

const SendRequestScreen = ( {navigation} ) => {

    ....

    // use here
    return (
        .....
        <LogOut onLongPress={() => navigation.navigate("Touch")} delayPressIn={0}>
            <Text >Log Out</Text>
        </LogOut>
        
    )
}

Utilisation dans SendRequestScreen.js

// mylist-styling.js
export const LogOut = styled.TouchableOpacity`
    width: 54px;
    height: 20px;
    margin-right: 12px;
    background-color: #5196f4;
    border-radius: 4px;
`
.....

Il n'est pas essentiel d'utiliser container.js car vous pouvez écrire une partie de connexion dans SendRequestScreen.js et vous pouvez utiliser presenter pour y écrire une logique commune si vous le souhaitez


0 commentaires

0
votes

J'ai travaillé sur de nombreux projets et je pense que vous devriez faire quelque chose comme ça.

Comme vous avez des paramètres d'écran.

  1. Créer un nom de répertoire Settings et créer index.js fichier index.js
  2. Dans le même répertoire, vous pouvez créer styles.js (ou dans le cas de plusieurs écrans, vous pouvez créer des styles de répertoire avec plusieurs fichiers) Dans ce fichier, vous pouvez écrire tous vos css.
  3. Et pour la partie View (Presenter), créez un nouveau fichier SettingsView.js un HOC, il vous suffit d'écrire toute votre partie visible dans ce fichier et toutes les fonctionnalités et les données passent des accessoires dans ce fichier sous forme d'index.js et vous devez importer votre css fichier dans ce fichier.

0 commentaires

1
votes

Je vous suggère de le structurer comme ci-dessous. Aussi pas d'infraction, vous pouvez implémenter des logiques de base dans l'écran mais si vous voulez qu'elles soient réutilisables sur d'autres écrans que d'avoir un dossier Util pour cela. Dans votre cas, mettez la fonction convertToDollars dans Util.js et ne vous inquiétez pas pour l'implémenter partout. Sera plus utile si plusieurs mains touchent votre code.

|— src
|   |— assets
|   |   |— fonts
|   |   |— images
|   |— screens
|   |   |— login
|   |   |   |— index.js
|   |   |   |— styles.js
|   |   |— signup
|   |   |   |— index.js
|   |   |   |— styles.js
|   |— utils
|   |   |— Util.js
|   |   |— DataHandler.js


0 commentaires