Я получаю эту ошибку при попытке прочитать локальный файл JSON в Kotlin/JS+React. Что здесь происходит?

Я пытаюсь прочитать массив JSON из файла, сохранить его как List в моем компоненте и использовать его для отображения некоторых вещей, но я получаю эту ошибку: Warning: Can't call setState on a component that is not yet mounted. Вот мой код:

Классы для отображения списка:

data class Member(val name: String, val githubUrl: String, val positions: List<String>)

external interface MemberListProps : RProps {
    var members: List<Member>
}

class MemberList : RComponent<MemberListProps, RState>() {
    override fun RBuilder.render() {
        ul {
            for (member in props.members) {
                li {
                    styledA {
                        css { attrs.href = member.githubUrl }
                        +member.name
                    }

                    ul {
                        member.positions.forEach {
                            li { +it }
                        }
                    }
                }
            }
        }
    }
}

Использование кода:

external interface AppState : RState {
    var members: List<Member>
}

class App : RComponent<RProps, AppState>() {
    override fun RBuilder.render() {
        state.members.forEach { _ ->
            memberList {
                members = state.members
            }
        }
    }

    private fun fetchMembers() = window.fetch("./members.json").unsafeCast<Array<Member>>()

    override fun AppState.init() {
        val jsonMembers = fetchMembers()
        members = listOf()

        setState {
            members = jsonMembers.toList()
        }
    }
}

Заранее спасибо!


person TheOnlyTails    schedule 18.12.2020    source источник


Ответы (1)


Не звоните setState {} в AppState.init(), я бы посоветовал переместить ваш код в componentDidMount()

    override fun componentDidMount() {
        val jsonMembers = fetchMembers()
        members = listOf()

        setState {
            members = jsonMembers.toList()
        }
    }
person andylamax    schedule 16.01.2021