Не может быть готово свойство null - Тернарный оператор для массива объектов - PullRequest
0 голосов
/ 30 января 2020

В настоящее время я сопоставляю массив объектов с именем ProfileDetails в таблице. Внизу таблицы у меня есть кнопка, где вы можете решить accept эти детали. Я пытаюсь сделать троичный оператор для кнопки disabled, если у ProfileDetails нет конца TransacationType. TransactionType.Name === "End". Я получаю TransactionType ноль. Некоторые пользователи могут иметь больше или меньше четырех объектов в массиве.

Вот что я пробовал:

           <Grid item xs={2}>
                    <Grid
                        container
                        justify="center">
                        <Grid item>
                           {ProfileDetails
                                .TransactionType
                                .Name ===
                            "End" ? ( 
                            <Button
                                variant="contained"
                                color="primary"
                                onClick={
                                    handleApprove
                                }>
                                Approve
                            </Button>
                            ) : ( 
                            <Button
                                variant="contained"
                                color="primary"
                                disabled>
                                Approve
                            </Button> 
                             )} 
                        </Grid>
                    </Grid>
                </Grid>
            </Grid>

Пример одного из массивов:

(4) [{…}, {…}, {…}]
0: {ProfileID: 476, Location: Home,  TransactionType: {Name: "LogIn", ShortName: null, ID: 1}
1: {ProfileID: 476, Location: Home,  TransactionType: {Name: "LogOut", ShortName: null, ID: 1} 
2: {ProfileID: 476, Location: Home,  TransactionType: {Name: "Break", ShortName: null, ID: 1}
3: {ProfileID: 476, Location: Home,  TransactionType: {Name: "End", ShortName: null, ID: 1}                                                        
 "

Ответы [ 2 ]

2 голосов
/ 30 января 2020

Если ProfileDetails является элементом в вашем массиве, измените

ProfileDetails.TransactionType.Name === 'End' ? a : b

на

ProfileDetails.TransactionType
  && ProfileDetails.TransactionType.Name === 'End' ? a : b

Если ProfileDetails равно массив, и вы хотите отобразить a, когда ваш массив содержит End TransactionType (и b в противном случае), сопоставьте имена типов транзакций и проверьте, включает ли он 'End':

ProfileDetails.map(p => p.TransactionType.Name).includes('End') ? a : b
1 голос
/ 30 января 2020

Вы никогда не указываете, для какого элемента массива вы пытаетесь прочитать свойство TransactionType. Вам нужно нацелить что-то вроде ProfileDetails[0].TransactionType.Name или отобразить каждый объект в массиве, например:

{ProfileDetails.map(profile => {
    profile.TransactionType.Name === "End" ?
    (<Grid item>
        <Button enabled>
    </Grid>) :
    (<Grid item> 
        <Button disabled>
    </Grid>)
})}

Повторное чтение вашего вопроса и комментариев, похоже, что вы действительно хотите сделать, это отобразить активированную кнопку, если один объектов в массиве имеет свойство «Конец», а в противном случае отобразить отключенную кнопку. В этом случае вы можете просто отключить .map для .some. Вам может понадобиться return элемент сетки в каждом случае, чтобы он работал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...